如何產生一個BMP影像物件 |
尚未結案
|
danielkelly
初階會員 發表:36 回覆:108 積分:28 註冊:2003-05-11 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
danielkelly
初階會員 發表:36 回覆:108 積分:28 註冊:2003-05-11 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
danielkelly您好:
請參考下面連結
http://delphi.ktop.com.tw/topic.php?topic_id=35128
【問題】array2bmp 順心
|
danielkelly
初階會員 發表:36 回覆:108 積分:28 註冊:2003-05-11 發送簡訊給我 |
|
arisaka_matsuri
高階會員 發表:25 回覆:205 積分:231 註冊:2003-10-19 發送簡訊給我 |
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 發送簡訊給我 |
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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |