有誰可以解說一下關於計灰階值的程式嗎? |
尚未結案
|
黑輪
中階會員 發表:135 回覆:188 積分:64 註冊:2004-01-29 發送簡訊給我 |
我用搜尋找有關灰階的程式,找到了,可是程式裡面有些程式不了解,大家知道的話可以說明一下嗎?
下面是程式:
Graphics::TBitmap *Bmp = new Graphics::TBitmap(); Byte *ptr; int r,g,b; int gray; int i,j; //int threshold; Bmp->Assign(Image1->Picture->Bitmap); for(j=0;j裡面的: ptr = (Byte *)Bmp->ScanLine[j]; b=ptr[i*3]; g=ptr[i*3 1]; r=ptr[i*3 2]; gray=0.299*r 0.587*g 0.114*b; ptr[i*3]=(Byte)gray; ptr[i*3 1]=(Byte)gray; ptr[i*3 2]=(Byte)gray; 這些我不知道是什麼意思(為何要乘上哪些數字)? 感謝大家的幫忙哦~~~ |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
黑輪
中階會員 發表:135 回覆:188 積分:64 註冊:2004-01-29 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
auslk
初階會員 發表:35 回覆:77 積分:32 註冊:2003-02-17 發送簡訊給我 |
|
黑輪
中階會員 發表:135 回覆:188 積分:64 註冊:2004-01-29 發送簡訊給我 |
|
wasa
一般會員 發表:0 回覆:1 積分:0 註冊:2004-04-08 發送簡訊給我 |
不好意思喔
b=ptr[i*3];
g=ptr[i*3+1];
r=ptr[i*3+2];
請問為什麼要乘以3?
為什麼要加1?
為什麼要加2?
我使用這個方法轉灰階
大張的圖是ok沒問題
可是小小張的圖卻沒辦法處理
不知有沒有高手可以幫忙解答
引言: //定義 如下: typedef struct { Byte B; Byte G; Byte R; } pixel; @ 一個PIXEL 有3個空間 分別儲存 B G R 順序! @ 你讀出來後就是B G R引言: 哦~~哪是不是彩色圖片的RGB值,乘上哪些數字就可以變灰階值呢? 哪b=ptr[i*3];又是啥意思? g=ptr[i*3 1]; r=ptr[i*3 2]; 不好意思~~我不太清楚~~ 感謝您哦~~ |
yhc0927
一般會員 發表:3 回覆:5 積分:1 註冊:2003-12-21 發送簡訊給我 |
這是我學前面的程式碼?
我想請問一下!為什麼執行到最後,我的Image2沒有轉成灰階的圖出來呢?
請問我是不是有作錯什麼地方呢?
謝謝 if(Form1->OpenPictureDialog1->Execute())
{
int r,g ,b, gray;
Byte *ptr;
int i, j; Graphics::TBitmap *pBmpfile = new Graphics::TBitmap(); pBmpfile->Assign(Form1->Image1->Picture->Bitmap); Form1->Image1->Picture->LoadFromFile(Form1->OpenPictureDialog1->FileName); for(i = 0; i < pBmpfile->Height; i )
{
ptr = (Byte *)pBmpfile->ScanLine[i];
for(j = 0; j < pBmpfile->Width; j )
{
r = ptr[i*3 2];
g = ptr[i*3 1];
b = ptr[i*3]; gray = 0.299*r 0.587*g 0.114*b;
ptr[i*3 2] = (Byte)gray;
ptr[i*3 1] = (Byte)gray;
ptr[i*3] = (Byte)gray; } }
Form1->Image2->Picture->Assign(pBmpfile); }
|
arisaka_matsuri
高階會員 發表:25 回覆:205 積分:231 註冊:2003-10-19 發送簡訊給我 |
|
yhc0927
一般會員 發表:3 回覆:5 積分:1 註冊:2003-12-21 發送簡訊給我 |
|
fency
一般會員 發表:2 回覆:5 積分:1 註冊:2004-01-19 發送簡訊給我 |
引言: 不好意思喔 b=ptr[i*3]; g=ptr[i*3 1]; r=ptr[i*3 2]; 請問為什麼要乘以3? 為什麼要加1? 為什麼要加2? 我使用這個方法轉灰階 大張的圖是ok沒問題 可是小小張的圖卻沒辦法處理 不知有沒有高手可以幫忙解答您好 因為一個pixel裡面又存著三個值,分別為B,G,R 因此假如今天想把一張圖裡面B值都取出來的話 那麻在第二個for迴圈裡應該就要寫成 for i:=0 to Bmp.width -1 do begin B:=ptr[i*3]; end;如此一來才能順利的把所有的B值給取出來 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |