關於影像的複製還有顯示 |
答題得分者是:richtop
|
bcb6
一般會員 發表:4 回覆:5 積分:1 註冊:2004-08-31 發送簡訊給我 |
void __fastcall TForm1::Button_openfileClick(TObject *Sender)
{
if(OpenDialog1->Execute())
{
temp1=new Graphics::TBitmap();
temp2=new Graphics::TBitmap();
temp1->LoadFromFile(OpenDialog1->FileName);
temp2->LoadFromFile(OpenDialog1->FileName);
Image1->Width=Width=temp1->Width;
Image1->Height=Height=temp1->Height;
Image1->Picture->Assign(temp1);
}
}
void __fastcall TForm1::Button_resetClick(TObject *Sender)
{
temp1=temp2;
Image1->Picture->Assign(temp1);
Form1->Refresh();
}
可以直接用temp1=temp2嗎? 另外 Image1->Picture->Assign(temp1);的意思是複製temp1到Image1上嗎?
我在Button_reset想要做到 回復原來的圖片 可是這樣寫好像有錯誤 因為達不到我要的功能 不知道要怎樣寫呢?假如temp2是原來的圖形,temp1是做過影像處理之後的圖片。且影像處理都在temp1上面做 temp2是用來回復原圖的。
|
brook
資深會員 發表:57 回覆:323 積分:371 註冊:2002-07-12 發送簡訊給我 |
// 修改後 void __fastcall TForm1::Button_openfileClick(TObject *Sender) { if(OpenDialog1->Execute()) { temp1=new Graphics::TBitmap(); temp2=new Graphics::TBitmap(); temp1->LoadFromFile(OpenDialog1->FileName); temp2->Assign(temp1); //可省讀磁碟的時間 Image1->Width=Width=temp1->Width; Image1->Height=Height=temp1->Height; Image1->Picture->Assign(temp1); } } void __fastcall TForm1::Button_resetClick(TObject *Sender) { Image1->Picture->Assign(temp2); //從temp2 load 進來 Form1->Refresh(); }可以直接用temp1=temp2嗎? ans:假如要複製圖,不能? 另外 Image1->Picture->Assign(temp1);的意思是複製temp1到Image1上嗎? ans:YES 我在Button_reset想要做到 回復原來的圖片 可是這樣寫好像有錯誤 因為達不到我要的功能 不知道要怎樣寫呢?假如temp2是原來的圖形,temp1是做過影像處理之後的圖片。且影像處理都在temp1上面做 temp2是用來回復原圖的。 ans:直接Assign(temp2)不就好了.你用temp1=temp2;假如temp1沒先存起來,會有一些記憶體無法delete. |
richtop
資深會員 發表:122 回覆:646 積分:468 註冊:2003-06-10 發送簡訊給我 |
bcb6 您好:
引言: void __fastcall TForm1::Button_openfileClick(TObject *Sender) { if(OpenDialog1->Execute()) { temp1=new Graphics::TBitmap(); temp2=new Graphics::TBitmap(); //temp1->LoadFromFile(OpenDialog1->FileName); temp2->LoadFromFile(OpenDialog1->FileName); temp1->Assign(temp2); Image1->Width=Width=temp1->Width; Image1->Height=Height=temp1->Height; Image1->Picture->Assign(temp1); } } void __fastcall TForm1::Button_resetClick(TObject *Sender) { temp1=temp2; Image1->Picture->Assign(temp1); Form1->Refresh(); } 可以直接用temp1=temp2嗎? 理論上可以,不過有兩種情況: 1.RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====#####Graphics::TBitmap *temp1 = NULL; // 這時temp1只是一個指標變數,系統未配置實際儲存TBitmap的空間。 Graphics::TBitmap *temp2 = new Graphics::TBitmap(); // temp2指向系統所配置儲存TBitmap的記憶體空間。 temp1 = temp2; // 這時temp1,temp2指向相同的TBitmap記憶體空間2.Graphics::TBitmap *temp1 = new Graphics::TBitmap(); Graphics::TBitmap *temp2 = new Graphics::TBitmap(); // 此時,temp1,temp2分別指向系統所配置儲存TBitmap的記憶體空間。 temp1 = temp2; // 語法OK,因為temp1是一個指標,所以其內容(所存放的位址)會等於temp2的內容,因此temp1原先所指向系統配置的TBitmap記憶體空間位址,如今該值被temp2的值取代了,雖然語法仍對,但之前temp1所指的那塊記憶體空間,也就無法被釋放了,將造成記憶體漏失。另外 Image1->Picture->Assign(temp1);的意思是複製temp1到Image1上嗎? 是複製沒錯! 我在Button_reset想要做到 回復原來的圖片 可是這樣寫好像有錯誤 因為達不到我要的功能 不知道要怎樣寫呢?假如temp2是原來的圖形,temp1是做過影像處理之後的圖片。且影像處理都在temp1上面做 temp2是用來回復原圖的。 依您的描述,temp1,temp2應該要各自有各自的記憶體空間,即case 2。 所以這時就不能使用 temp1 = temp2; 而該使用 temp1->Assign(temp2); 來將temp2複製到temp1。 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |