線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:747
推到 Plurk!
推到 Facebook!

想請問一下我這裡哪裡有寫錯....我一直找不出原因來

尚未結案
huangcc
一般會員


發表:7
回覆:6
積分:2
註冊:2004-10-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-11 23:44:03 IP:218.172.xxx.xxx 未訂閱
想請問一下: 我這裡哪裡有寫錯....我一直找不出原因來 程式用意在於把兩張圖片...做一下RGB運算...輸出於IMAGE3上面 但執行後出現"Scan line index out of range ." 請問是哪裡出錯了ㄋ.....!!!  (@.@|||)    void __fastcall TForm1::Button1Click(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("¹Ï¤ù¬Û¥[","³z©ú«×","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 ) { 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]=(byte)b3; ptr3[x*3 1]=(byte)g3; ptr3[x*3 2]=(byte)r3; BMP3->Width = BMP1->Width; BMP3->Height = BMP1->Height; } } Image3->Picture->Assign(BMP3); }
fnk
高階會員


發表:40
回覆:149
積分:102
註冊:2004-01-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-12 00:46:31 IP:140.124.xxx.xxx 未訂閱
請問你的 Image3 一開始是不是沒有 Load 一張圖片, 因為你有用到   
ptr3=(Byte *)BMP3->ScanLine[y]; 
但是因為 Image3 沒有圖片, 所以會造成錯誤.. 最簡單的做法, 就是預先放入一個大小跟Image1一樣大的圖片... 這樣就不會有這樣的錯誤發生... ============= 有興趣,就能進步 =============
JerryKuo
版主


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-12 09:26:56 IP:220.135.xxx.xxx 未訂閱
引言: 想請問一下: 我這裡哪裡有寫錯....我一直找不出原因來 程式用意在於把兩張圖片...做一下RGB運算...輸出於IMAGE3上面 但執行後出現"Scan line index out of range ." 請問是哪裡出錯了ㄋ.....!!! (@.@|||)
void __fastcall TForm1::Button1Click(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);
BMP3->PixelFormat = pf24bit;
BMP3->Width = BMP1->Width;
BMP3->Height = BMP1->Height;    float nb;
nb=StrToInt(InputBox("¹Ï¤ù¬Û¥[","³z©ú«×","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  )
   {
    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]=(byte)b3;
    ptr3[x*3 1]=(byte)g3;
    ptr3[x*3 2]=(byte)r3;        //BMP3->Width = BMP1->Width;
    //BMP3->Height = BMP1->Height;
    }
  }
 Image3->Picture->Assign(BMP3);    }
huangcc你好: 這個問題好熟悉,請參考一下這篇文章 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=59426 如發文所說的,pixelformat沒有設定,而這二行位置也錯誤 BMP3->Width = BMP1->Width; BMP3->Height = BMP1->Height;
auslk
初階會員


發表:35
回覆:77
積分:32
註冊:2003-02-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-12 13:06:38 IP:203.75.xxx.xxx 未訂閱
程式沒問題,請您先load 一張相同大小的影像 Best Regards, Pauli @.@b 11/12/04'
huangcc
一般會員


發表:7
回覆:6
積分:2
註冊:2004-10-29

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