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

請問關於圖片相加的問題

答題得分者是:JerryKuo
poaivy
中階會員


發表:40
回覆:78
積分:53
註冊:2004-08-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-09 13:30:52 IP:140.117.xxx.xxx 未訂閱
想請問一下我這裡哪裡有寫錯....我一直找不出原因來 拜託了  用意在於把兩張圖片...做一下RGB運算...輸出於IMAGE3上面
void __fastcall TForm1::Button2Click(TObject *Sender)
{                  
Graphics::TBitmap *BMP1 = new Graphics::TBitmap();
Graphics::TBitmap *BMP2 = new Graphics::TBitmap();
Graphics::TBitmap *BMP3 = new Graphics::TBitmap();
Byte *ptr1=NULL,*ptr2=NULL,*ptr3=NULL;
BMP1->Assign(Image1->Picture->Bitmap);
BMP2->Assign(Image2->Picture->Bitmap);
float nb;
nb=StrToInt(InputBox("圖片相加","透明度","1"));
for (int y=0;yHeight;y  )
   { ptr1=(Byte *)BMP1->ScanLine[y];
     ptr2=(Byte *)BMP2->ScanLine[y];
     ptr3=(Byte *)BMP3->ScanLine[y];
   for (int x=0 ; xWidth; x  )
   {
   Byte r1,g1,b1,r2,g2,b2,r3,g3,b3;
    r1=ptr1[x*3 2];g1=ptr1[x*3 1];b1=ptr1[x*3];
    r2=ptr2[x*3 2];g2=ptr2[x*3 1];b2=ptr2[x*3];
    r3=nb*r1 (1-nb)*r2 ;
    g3=nb*g1 (1-nb)*g2 ;
    b3=nb*b1 (1-nb)*b2 ;
    ptr3[x*3]=r3    ;
    ptr3[x*3 1]=g3 ;
    ptr3[x*3 2]=b3;        }
  }
 Image3->Picture->Assign(BMP3);
}
JerryKuo
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-09 13:38:15 IP:220.135.xxx.xxx 未訂閱
引言: 想請問一下我這裡哪裡有寫錯....我一直找不出原因來 拜託了 用意在於把兩張圖片...做一下RGB運算...輸出於IMAGE3上面
void __fastcall TForm1::Button2Click(TObject *Sender)
{                  
Graphics::TBitmap *BMP1 = new Graphics::TBitmap();
Graphics::TBitmap *BMP2 = new Graphics::TBitmap();
Graphics::TBitmap *BMP3 = new Graphics::TBitmap();
Byte *ptr1=NULL,*ptr2=NULL,*ptr3=NULL;
BMP1->Assign(Image1->Picture->Bitmap);
BMP2->Assign(Image2->Picture->Bitmap);
float nb;
nb=StrToInt(InputBox("圖片相加","透明度","1"));
for (int y=0;yHeight;y  )
   { ptr1=(Byte *)BMP1->ScanLine[y];
     ptr2=(Byte *)BMP2->ScanLine[y];
     ptr3=(Byte *)BMP3->ScanLine[y];
   for (int x=0 ; xWidth; x  )
   {
   Byte r1,g1,b1,r2,g2,b2,r3,g3,b3;
    r1=ptr1[x*3 2];g1=ptr1[x*3 1];b1=ptr1[x*3];
    r2=ptr2[x*3 2];g2=ptr2[x*3 1];b2=ptr2[x*3];
    r3=nb*r1 (1-nb)*r2 ;
    g3=nb*g1 (1-nb)*g2 ;
    b3=nb*b1 (1-nb)*b2 ;
    ptr3[x*3]=r3    ;
    ptr3[x*3 1]=g3 ;
    ptr3[x*3 2]=b3;        }
  }
 Image3->Picture->Assign(BMP3);
}
poaivy你好: compiler會建議你,byte數最好不要做乘法和除法運算 如果一定要這樣做的話,建議你可以這樣改。
 
    int r1,g1,b1,r2,g2,b2,r3,g3,b3;
    r1=(int)ptr1[x*3 2];g1=(int)ptr1[x*3 1];b1=(int)ptr1[x*3];
    r2=(int)ptr2[x*3 2];g2=(int)ptr2[x*3 1];b2=(int)ptr2[x*3];
    r3=nb*r1 (1-nb)*r2 ;
    g3=nb*g1 (1-nb)*g2 ;
    b3=nb*b1 (1-nb)*b2 ;
    /*原始碼順序好像不對
     ptr3[x*3]=r3;
     ptr3[x*3 1]=g3 ;
     ptr3[x*3 2]=b3;
     */
    ptr3[x*3]=(byte)b3;
    ptr3[x*3 1]=(byte)g3;
    ptr3[x*3 2]=(byte)r3;
發表人 - jerrykuo 於 2004/11/09 13:41:58
poaivy
中階會員


發表:40
回覆:78
積分:53
註冊:2004-08-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-10 18:32:46 IP:140.117.xxx.xxx 未訂閱
謝謝指導 可是我改了以後,會出現以下畫面 ... 改了多次還是沒有辦法 我的目的只是要把IMAGE1的圖跟IMAGE2的圖RGB值取出來個別相加減 把結果放到IMAGE3上去結果出現上圖的警訊。
JerryKuo
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-11 09:16:05 IP:220.135.xxx.xxx 未訂閱
引言: 謝謝指導 可是我改了以後,會出現以下畫面 ... 改了多次還是沒有辦法 我的目的只是要把IMAGE1的圖跟IMAGE2的圖RGB值取出來個別相加減 把結果放到IMAGE3上去結果出現上圖的警訊。
poaivy你好: 應該是你的BMP3 沒有宣告大小,所以才會錯誤 記得加上 BMP3->Width = BMP1->Width; BMP3->Height = BMP1->Height;
poaivy
中階會員


發表:40
回覆:78
積分:53
註冊:2004-08-09

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-11 09:58:32 IP:140.117.xxx.xxx 未訂閱
版主...多謝熱心回應...因為不注意 忘記BMP3的大小沒給..... 現在是可以RUN了....可是出來的圖卻是全白的= =".... 我有去看過ptr3[]的值..他有值....並不是255...可是出來的圖卻是白白的 給個建議吧...^^"
poaivy
中階會員


發表:40
回覆:78
積分:53
註冊:2004-08-09

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-11-11 10:12:06 IP:140.117.xxx.xxx 未訂閱
...抱歉..問了一個蠢問題... 又是我不注意...忘記給pixelformat下定義了所以... 圖才會白白的.... 現在問題以解決了...多謝版大
系統時間:2024-06-13 22:41:43
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!