glory
一般會員
發表:10 回覆:3 積分:2 註冊:2005-01-13
發送簡訊給我
|
我想把框選的範圍放到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
發送簡訊給我
|
您好: PO程式碼的方式請參考版規說明,煩請修改謝謝您的配合
>
|
richtop
資深會員
發表:122 回覆:646 積分:468 註冊:2003-06-10
發送簡訊給我
|
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
發送簡訊給我
|
RichTop先生,謝謝你的回應,我的問題已經解決了,但是我又發現了另一個問題,就是框取時只能由左上框至右下,不然就會顯示"參數錯誤"的警告,不知是哪裡出了問題
|
richtop
資深會員
發表:122 回覆:646 積分:468 註冊:2003-06-10
發送簡訊給我
|
glory 您好 不精確知道問題所在?
不過會不會是當您嚐試反過來框取時,座標差出現負值的關係?
您請先參考看看. RichTop 敬上 =====*****
把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題!
=====#####
|
glory
一般會員
發表:10 回覆:3 積分:2 註冊:2005-01-13
發送簡訊給我
|
是的。我後來用絕對值後,是可以任意框選
但圖會旋轉,不知有什麼解決辦法?
|
richtop
資深會員
發表:122 回覆:646 積分:468 註冊:2003-06-10
發送簡訊給我
|
glory 您好: 問題不難解決!
您只要先判斷出左上角的點(較小的x與y),那麼另一點就是右下角的點了! RichTop 敬上 =====*****
把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題!
=====#####
|