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

如何產生一個BMP影像物件

尚未結案
danielkelly
初階會員


發表:36
回覆:108
積分:28
註冊:2003-05-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-12 17:39:15 IP:140.124.xxx.xxx 未訂閱
請問一下勒~ 我知道用
 
Graphics::TBitmap* BMP =new Graphics::TBitmap();
可以產生一個新的BMP物件???(應該沒錯八??) 但我不想用
 
BMP->Assign(Image1->Picture->Bitmap);
加入一個現有的影像 我想自己New 一個 新的灰階影像 灰階值都是一樣的[0.. ] 請問要怎麼做??
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-12 18:18:13 IP:140.135.xxx.xxx 未訂閱
danielkelly您好:
引言: 我想自己New 一個 新的灰階影像 灰階值都是一樣的[0.. ] 請問要怎麼做??
您所說[新的灰階影像]指的是? TBitamp ? 還是已存好的陣列?
danielkelly
初階會員


發表:36
回覆:108
積分:28
註冊:2003-05-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-12 19:56:52 IP:140.124.xxx.xxx 未訂閱
是 已經存好的陣列拉~~ 謝謝 解答~~
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-12 21:57:09 IP:140.135.xxx.xxx 未訂閱
danielkelly您好: 請參考下面連結 http://delphi.ktop.com.tw/topic.php?topic_id=35128 【問題】array2bmp 順心
danielkelly
初階會員


發表:36
回覆:108
積分:28
註冊:2003-05-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-03-13 12:29:08 IP:140.124.xxx.xxx 未訂閱
對不起耶 我想問的是 我有一個陣列image[width*height] 存的是 一個灰階影像的像素資料 現在想把它 變成新BMP檔 裡面的灰階值,就是image[width*height]裡面的像素資料 請問要怎麼作???
arisaka_matsuri
高階會員


發表:25
回覆:205
積分:231
註冊:2003-10-19

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-03-13 16:39:20 IP:218.166.xxx.xxx 未訂閱
danielkelly 你好:
引言:現在想把它 變成新BMP檔 裡面的灰階值,就是image[width*height]裡面的像素資料
版大提供的連結文章的方法應該可以。在BCB中,我的作法是:
//-------------------------------------------
// 灰階調色盤的建立
//-------------------------------------------
// 定義調色盤結構
typedef struct {
  TLogPalette lpal;
  TPaletteEntry dummy[256];
} LogPal;    // 建立調色盤
LogPal GrayPalette;
GrayPalette.lpal.palVersion    = 0x300;
GrayPalette.lpal.palNumEntries = 256;
for(unsigned int Index = 0; Index < 256; Index  )
{
  GrayPalette.lpal.palPalEntry[Index].peRed   = (unsigned char)Index;
  GrayPalette.lpal.palPalEntry[Index].peGreen = (unsigned char)Index;
  GrayPalette.lpal.palPalEntry[Index].peBlue  = (unsigned char)Index;
  GrayPalette.lpal.palPalEntry[Index].peFlags = (unsigned char)0;
}    //-------------------------------------------
// 產生新的灰階Bitmap (8bpp)
//-------------------------------------------
Graphics::TBitmap *NewBMP = new Graphics::TBitmap();
NewBMP->PixelFormat = pf8bit; // 指定為 8bpp 的BMP
NewBMP->Width       = width;  // 你的影像寬度
NewBMP->Height      = height; // 你的影像高度
NewBMP->Palette     = CreatePalette(&GrayPalette.lpal); // 建立灰階調色盤    Byte *ptr;
for(int row = 0; row < NewBMP->Height; row  )
{
  ptr = (Byte *)NewBMP->ScanLine[row];
  for(int col = 0; col < NewBMP->Width; col  )
    ptr[col] = image[row * width   col]; // 假設你的陣列是一維的
}
關於灰階調色盤的建立,可以翻翻BCB的線上說明和Windows SDK說明,我摸了好久才擠出來。這樣做的好處是節省記憶體,因為一個像素只用了1 Byte,比起上述文章的方法省。還有就是在影像處理時「快一點」(理論上啦),但比較麻煩的地方是要建立一個灰階的調色盤,除非你不想讓他顯示出來 提供你作參考^^
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-03-13 19:40:41 IP:61.231.xxx.xxx 未訂閱
danielkelly您好:
引言: 對不起耶 我想問的是 我有一個陣列image[width*height] 存的是 一個灰階影像的像素資料 現在想把它 變成新BMP檔 裡面的灰階值,就是image[width*height]裡面的像素資料 請問要怎麼作???
給您的連結當中所提供的function array2bmp不行用嗎? 若您的像素資料是8 bit那ptr[x*3]就不需用*3了 只需改成
ptr[x]=g[x y*w];
就可以了 若您當初彩色轉灰階的方式是如同下面連結的方式(比較嚴謹) http://delphi.ktop.com.tw/topic.php?TOPIC_ID=37679 那請改用arisaka_matsuri前輩的方式< > 順心 < > 發表人 - taishyang 於 2004/03/13 19:48:49
danielkelly
初階會員


發表:36
回覆:108
積分:28
註冊:2003-05-11

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