全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1194
推到 Plurk!
推到 Facebook!

BMP_64K轉256_的問題 (update)

答題得分者是:RaynorPao
hjlin
一般會員


發表:63
回覆:48
積分:22
註冊:2003-02-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-07-16 10:18:24 IP:61.56.xxx.xxx 未訂閱
請問各位一個問題,我想將 64K(18 bits)BMP 轉成 256(8 bits)BMP,我用了 bmp->PixelFormat=pf8bit 此指令,不過顏色好像會失真,結果如下: 可以給我一個解決的方法嗎?如何不會失真,謝謝 Before After
JerryKuo
版主


發表:42
回覆:571
積分:322
註冊:2003-03-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-07-16 10:59:19 IP:210.68.xxx.xxx 未訂閱
你好: 你可以先用繪圖軟體把圖轉換為256色,再比對程式跑出來的圖, 看看是相似。(應該是相似吧^^) bmp->PixelFormat=pf8bit;這一行應該不會有問題
hjlin
一般會員


發表:63
回覆:48
積分:22
註冊:2003-02-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-07-16 11:31:40 IP:61.56.xxx.xxx 未訂閱
我用影像處理軟體處理過後,得到的圖色很正常啊~ 我的程式片段如下: TPoint ptLT1, ptRB1, ptLT2, ptRB2; ptLT1.x=Image3->Left; ptLT1.y=Image3->Top; ptRB1.x=Image3->Left Image3->Width; ptRB1.y=Image3->Top Image3->Height; ptLT2=Form1->ClientToScreen(ptLT1); ptRB2=Form1->ClientToScreen(ptRB1); HDC dc; dc=GetDC(0); TCanvas *canvas=new TCanvas; canvas->Handle=dc; Graphics::TBitmap *bmp=new Graphics::TBitmap; bmp->Width=Image3->Width/1.5; bmp->Height=Image3->Height/1.5; bmp->Canvas->CopyMode=cmSrcCopy; SetStretchBltMode(bmp->Canvas->Handle, STRETCH_HALFTONE); bmp->Canvas->CopyRect(Rect(0, 0, bmp->Width, bmp->Height), canvas, Rect(ptLT2.x, ptLT2.y, ptRB2.x, ptRB2.y)); bmp->PixelFormat=pf8bit; // Transfer 16bit to 8bits if(SavePictureDialog1->Execute()) { bmp->SaveToFile(SavePictureDialog1->FileName); } delete bmp; delete canvas; ReleaseDC(NULL, dc); }
hjlin
一般會員


發表:63
回覆:48
積分:22
註冊:2003-02-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-07-16 19:13:43 IP:61.56.xxx.xxx 未訂閱
SetStretchBltMode(Image3->Canvas->Handle, STRETCH_HALFTONE); Image3->Canvas->CopyMode=cmSrcCopy; Image3->Canvas->CopyRect(Rect(0, 0, Image3->Width, Image3->Height), Image1->Canvas, Rect(0, 0, int((Image1->Width/1.5) 0.5), int((Image1->Height/1.5) 0.5))); 我查出來上面這個程式會使得原本為256色變成64K色...WHY?
JerryKuo
版主


發表:42
回覆:571
積分:322
註冊:2003-03-10

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-07-17 17:50:03 IP:210.68.xxx.xxx 未訂閱
你好: 不知道這樣說跟你想的有沒有一樣 在做copy時,image一定是用內定顏色範圍複製像素色彩,也許是16bits,也許是24bits。不管,他如果是用16bits儲存,16bits大於256色,照理不可能失真,只是 儲存時會比較占空間,顏色是一樣的。不然你可以用點對點複製比較看看(不要用copyrect),看看原始顏色是否有被更改了?
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-07-17 23:47:02 IP:61.221.xxx.xxx 未訂閱
引言: 請問各位一個問題,我想將 64K(18 bits)BMP 轉成 256(8 bits)BMP,我用了 bmp->PixelFormat=pf8bit 此指令,不過顏色好像會失真,結果如下: 可以給我一個解決的方法嗎?如何不會失真,謝謝 [/blue] Before After
hjlin 你好:
(1)我的寫法跟你的是一樣的,但是~~我所得到的結果,卻不會像你的圖形失真
   那麼的嚴重
(2)我已經將執行的結果寄給你參考,先看看吧
(3)會變成 64K 的原因,是因為 VGA 設定的原因,你可以試試看更改 VGA 的色
   彩設定值,得到的結果又會不一樣
-- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
hjlin
一般會員


發表:63
回覆:48
積分:22
註冊:2003-02-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-07-18 12:50:57 IP:61.56.xxx.xxx 未訂閱
包子版主: 謝謝你囉!
系統時間:2024-05-17 6:46:16
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!