請問如何將縮圖呈列在image中? |
尚未結案
|
enu
中階會員 發表:36 回覆:93 積分:55 註冊:2003-10-22 發送簡訊給我 |
請教各位先進,可否幫小弟看看或修正一下程式;
小弟要將四張圖分別抓到四個image中,可是卻發生了問題,程式寫的不好,不知道有沒有先進可以指導一下,感恩!
Graphics::TBitmap *bmpSrc=new Graphics::TBitmap; void __fastcall TForm6::Button1Click(TObject *Sender) { for(nu=1;nu<=4;nu ) { if (nu==1) { //產生原圖 bmpSrc->Width=1024; bmpSrc->Height=720; bmpSrc->Canvas->Pen->Color=clBlack; bmpSrc->Canvas->MoveTo(path[0][0],path[0][1]); bmpSrc->Canvas->LineTo(path[1][0],path[1][1]); //copy縮圖到image中 Image1->Width=bmpSrc->Width/4; Image1->Height=bmpSrc->Height/4; r1=Rect(0,0,bmpSrc->Width,bmpSrc->Height); r2=Rect(0,0,Image1->Width,Image1->Height); Image1->Canvas->CopyRect(r2,bmpSrc->Canvas,r1); } delete bmpSrc; if (nu==2) { bmpSrc->Width=1024; bmpSrc->Height=720; bmpSrc->Canvas->Pen->Color=clBlack; bmpSrc->Canvas->MoveTo(path[1][0],path[1][1]); bmpSrc->Canvas->LineTo(path[2][0],path[2][1]); Image2->Width=bmpSrc->Width/4; Image2->Height=bmpSrc->Height/4; r1=Rect(0,0,bmpSrc->Width,bmpSrc->Height); r2=Rect(0,0,Image2->Width,Image2->Height); Image2->Canvas->CopyRect(r2,bmpSrc->Canvas,r1); } delete bmpSrc; if......................................... } } |
arisaka_matsuri
高階會員 發表:25 回覆:205 積分:231 註冊:2003-10-19 發送簡訊給我 |
dear enu: 首先,從你提供的程式碼來看,if...的安排就有問題。當 nu = 2 時,bmpSrc就會被delete掉。請自行trace一下便知道邏輯上的錯誤。 既然用了for迴圈,那冗餘的程式碼應該是能被簡化的。以下將你的程式碼利用 FindComponent來簡化(假設宣告都沒問題),希望這是你的意思~
void __fastcall TForm6::Button1Click(TObject *Sender) { Graphics::TBitmap *bmpSrc = new Graphics::TBitmap; const AnsiString ImageNamePrefix = "Image"; TImage* IMAGE; TRect r1, r2; for(int nu = 1; nu <= 4; nu ) { // 產生原圖 bmpSrc->Width = 1024; bmpSrc->Height = 720; bmpSrc->Canvas->Pen->Color = clBlack; bmpSrc->Canvas->MoveTo(path[nu-1][0], path[nu-1][1]); bmpSrc->Canvas->LineTo(path[nu][0], path[nu][1]); // 讓IMAGE指向指定的Image IMAGE = (TImage*)FindComponent(ImageNamePrefix IntToStr(nu)); // copy縮圖到image中 IMAGE->Width = bmpSrc->Width / 4; IMAGE->Height = bmpSrc->Height / 4; r1 = Rect(0, 0, bmpSrc->Width, bmpSrc->Height); r2 = Rect(0, 0, IMAGE->Width, IMAGE->Height); IMAGE->Canvas->CopyRect(r2, bmpSrc->Canvas, r1); } // 歸還bmpSrc delete bmpSrc; }FindComponent的用法(參考BCB Help) TComponent* __fastcall FindComponent(const AnsiString AName);或是找找站上的文章吧 |
enu
中階會員 發表:36 回覆:93 積分:55 註冊:2003-10-22 發送簡訊給我 |
|
arisaka_matsuri
高階會員 發表:25 回覆:205 積分:231 註冊:2003-10-19 發送簡訊給我 |
|
enu
中階會員 發表:36 回覆:93 積分:55 註冊:2003-10-22 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |