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

程式修改問題

尚未結案
glory
一般會員


發表:10
回覆:3
積分:2
註冊:2005-01-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-16 18:41:46 IP:220.139.xxx.xxx 未訂閱
我想把框選的範圍放到Image2,然後存檔起來,卻發現存成的檔案卻有外圍的白色範圍,就算用Image2->Transparent = true;存檔後還是不能去掉,我想去掉白色的外框,然後存檔起來,請各位高手賜教 下面是我的程式    //---------------------------------------------------------------------------    #include  #pragma hdrstop bool gbMDown; TRect grtLTRB; #include "qweqqqq.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { Image1->Width=320; Image1->Height=240; PaintBox1->Width=320; PaintBox1->Height=240; Image2->Width=320; Image2->Height=240; Image2->Stretch=true; } //--------------------------------------------------------------------------- void __fastcall TForm1::PaintBox1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { gbMDown=true; grtLTRB.Left=X; grtLTRB.Top=Y; grtLTRB.Right=X; grtLTRB.Bottom=Y; } //--------------------------------------------------------------------------- void __fastcall TForm1::PaintBox1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { if(gbMDown) { if(X<0) X=0; if(X>PaintBox1->Width) X=PaintBox1->Width; if(Y<0) Y=0; if(Y>PaintBox1->Height) Y=PaintBox1->Height; PaintBox1->Canvas->CopyMode=cmSrcCopy; PaintBox1->Canvas->CopyRect(grtLTRB, Image1->Canvas, grtLTRB); grtLTRB.Right=X; grtLTRB.Bottom=Y; PaintBox1->Canvas->Brush->Style=bsClear; PaintBox1->Canvas->Pen->Style=psDot; PaintBox1->Canvas->Pen->Color=clBlack; PaintBox1->Canvas->Rectangle(grtLTRB); } Application->ProcessMessages(); } //--------------------------------------------------------------------------- void __fastcall TForm1::PaintBox1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { gbMDown=false; PaintBox1->Canvas->CopyRect(grtLTRB,Image1->Canvas, grtLTRB); Image2->Canvas->FillRect(Rect(0, 0, Image2->Width, Image2->Height)); Image2->Canvas->CopyRect(grtLTRB, Image1->Canvas, grtLTRB); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { if(SavePictureDialog1->Execute())Image2->Picture->SaveToFile(SavePictureDialog1->FileName ".bmp"); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { if(OpenPictureDialog1->Execute())Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName); } //---------------------------------------------------------------------------
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-16 19:49:15 IP:210.68.xxx.xxx 未訂閱
您好:    PO程式碼的方式請參考版規說明,煩請修改謝謝您的配合 >
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-17 00:09:35 IP:211.76.xxx.xxx 未訂閱
glory 您好:    PaintBox1MouseUp(.)建議修改如下,請參考:    
void __fastcall TForm1::PaintBox1MouseUp(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
   gbMDown=false;
   PaintBox1->Canvas->CopyRect(grtLTRB,Image1->Canvas, grtLTRB);
   //Image2->Canvas->FillRect(Rect(0, 0, Image2->Width, Image2->Height));
   int w = grtLTRB.Width();
   int h = grtLTRB.Height();       Image2->Picture->Bitmap->Width  = w;
   Image2->Picture->Bitmap->Height = h;
   Image2->AutoSize = true;
   Image2->Canvas->CopyRect(TRect(0,0,w,h), Image1->Canvas, grtLTRB);
}
RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====#####
glory
一般會員


發表:10
回覆:3
積分:2
註冊:2005-01-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-18 18:47:31 IP:220.139.xxx.xxx 未訂閱
RichTop先生,謝謝你的回應,我的問題已經解決了,但是我又發現了另一個問題,就是框取時只能由左上框至右下,不然就會顯示"參數錯誤"的警告,不知是哪裡出了問題
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-05-23 23:32:51 IP:211.76.xxx.xxx 未訂閱
glory 您好 不精確知道問題所在? 不過會不會是當您嚐試反過來框取時,座標差出現負值的關係? 您請先參考看看. RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====#####
glory
一般會員


發表:10
回覆:3
積分:2
註冊:2005-01-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-05-27 16:29:07 IP:220.139.xxx.xxx 未訂閱
是的。我後來用絕對值後,是可以任意框選 但圖會旋轉,不知有什麼解決辦法?
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-05-27 17:06:09 IP:140.129.xxx.xxx 未訂閱
glory 您好: 問題不難解決! 您只要先判斷出左上角的點(較小的x與y),那麼另一點就是右下角的點了! RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====#####
系統時間:2024-05-19 17:11:56
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!