改變灰階像素值 |
尚未結案
|
larry701130
一般會員 發表:5 回覆:0 積分:1 註冊:2003-09-07 發送簡訊給我 |
Graphics::TBitmap *TheBitmap, *TempBitmap;
int Width, Height;
Byte *ptr1, *ptr2;
TempBitmap= new Graphics::TBitmap();
TheBitmap= Image1->Picture->Bitmap;
TempBitmap->Assign(TheBitmap);
Width= TheBitmap->Width;
Height= TheBitmap->Height;
for(int x=0;x< Width; x )
for(int y=0;y< Height;y )
TempBitmap->Canvas->Pixels[x][y]=RGB()<-----
TheBitmap->Assign(TempBitmap);
delete TempBitmap; 想問問如果我只想去做灰階的像素改變~也就是只有八位元~那就不能使用
pixels[][]這個屬性了嗎????
如果可以的話,pixels[][]=(這邊應該要怎填才行??不是不能填int嗎?)
因為正在處理灰階圖案
|
Cooky Kid
初階會員 發表:5 回覆:68 積分:44 註冊:2002-07-11 發送簡訊給我 |
看看這個範例能否給您一些幫助?
enjoy it!!!!
直接更改這圖像的色盤較快....
//--------------------------------------------------------------------------- //從彩色256色圖檔轉成256灰階圖檔 void __fastcall TForm1::Button1Click(TObject *Sender) {//先建立一暫時圖檔,並將Image1複製過來 Graphics::TBitmap *tmpBmp = new Graphics::TBitmap(); tmpBmp->Assign(Image1->Picture->Bitmap); //再設定暫時圖檔為8位元(256色) tmpBmp->PixelFormat = pf8bit; //宣告色盤結構陣列 PALETTEENTRY greyPal[256]; //將暫時圖檔色盤分離出來,並另建一色盤結構 HPALETTE hPal = tmpBmp->ReleasePalette(); //由暫時圖檔複製色盤至色盤結構陣列 if(::GetPaletteEntries(hPal, 0, 256, greyPal)) { for (int index = 0; index < 256; index ) {//從RGB轉換至最接近的灰度值 int gray = 0.114*(double)greyPal[index].peBlue 0.587*(double)greyPal[index].peGreen 0.299*(double)greyPal[index].peRed; //限制顏色範圍 if(gray <= 0) gray = 0; if(gray >= 255) gray = 255; //當RGB同為一值時,即顯示為灰階 greyPal[index].peBlue = (unsigned short)gray; greyPal[index].peGreen = (unsigned short)gray; greyPal[index].peRed = (unsigned short)gray; greyPal[index].peFlags = NULL; } //再將修改色盤指派給Image1色盤 ::SetPaletteEntries(hPal, 0, 256, greyPal); tmpBmp->Palette = hPal; } Image1->Picture->Bitmap->Assign(tmpBmp); delete tmpBmp; } //---------------------------------------------------------------------------人生就像是盒中的巧克力,除非你試了,要不然,你永遠都不知道它是什麼樣的口味。--阿甘正傳 |
richtop
資深會員 發表:122 回覆:646 積分:468 註冊:2003-06-10 發送簡訊給我 |
larry701130您好: 精確的說:灰階的像素其實仍是彩色的像素,只是其中的RGB分量均相同罷了。
所以您的問題似乎變成:當您確定某一像素的灰階值(gray)時,如何將這樣的值透過
Canvas->Pixels[x][y]的指定,來將影像秀出來。 建議關於顏色的相關資料,可參考BCB的help檔中的TColor type。 BCB中顏色是enum型態,簡單格式說明:0x00BBGGRR => 32 bits的整數 為安全起見可以先設定一個無號整數變數, unsigned int color=0;
..... gray = gray & 0xff; // 確保其值在0~255之間
color = (gray<<16) | (gray<<8) | gray; // '|'(or)改成' '(相加)也行
TempBitmap->Canvas->Pixels[x][y] = color // 進步就是解決之前存在的問題!
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |