procedure TForm1.N1Click(Sender: TObject);
var
DestRect,SourceRect:Trect;
begin
WorkImage:=tbitmap.Create;
plot1_x:=10 ;
plot2_x:=40 ;
plot1_y:=10 ;
plot2_y:=50;
DestRect.Left:=plot1_x;
DestRect.right:=plot2_x;
DestRect.top:=plot1_y;
DestRect.Bottom:=plot2_y;
SourceRect:=DestRect;
DestRect:=rect(0,0,plot2_x-plot1_x,plot2_y-plot1_y) ;
label1.canvas.copyrect(DestRect,Image2.Picture.Bitmap.canvas,SourceRect) ;
end;
高手请尺教
10 个解决方案
#1
沒在label上加過圖像﹐也想學習學習﹐幫你頂先
#2
楼主,我用你的代码测试了一下,没有问题,可以在label上显示image2的bmp位图。
不知你那里出了什么问题。不会是你的image2根本没有装载位图吧?
下面是我测试的代码。
procedure TForm1.Button1Click(Sender: TObject);
var
DestRect,SourceRect:Trect;
plot1_x,plot2_x,plot1_y,plot2_y: integer;
begin
plot1_x:=10 ;
plot2_x:=40 ;
plot1_y:=10 ;
plot2_y:=50;
DestRect.Left:=plot1_x;
DestRect.right:=plot2_x;
DestRect.top:=plot1_y;
DestRect.Bottom:=plot2_y;
SourceRect:=DestRect;
DestRect:=rect(0,0,plot2_x-plot1_x,plot2_y-plot1_y);
label1.canvas.copyrect(DestRect,Image2.Picture.Bitmap.canvas,SourceRect);
end;
不知你那里出了什么问题。不会是你的image2根本没有装载位图吧?
下面是我测试的代码。
procedure TForm1.Button1Click(Sender: TObject);
var
DestRect,SourceRect:Trect;
plot1_x,plot2_x,plot1_y,plot2_y: integer;
begin
plot1_x:=10 ;
plot2_x:=40 ;
plot1_y:=10 ;
plot2_y:=50;
DestRect.Left:=plot1_x;
DestRect.right:=plot2_x;
DestRect.top:=plot1_y;
DestRect.Bottom:=plot2_y;
SourceRect:=DestRect;
DestRect:=rect(0,0,plot2_x-plot1_x,plot2_y-plot1_y);
label1.canvas.copyrect(DestRect,Image2.Picture.Bitmap.canvas,SourceRect);
end;
#3
c
#4
procedure TForm1.Button1Click(Sender: TObject);
var
DestRect,SourceRect:Trect;
plot1_x,plot2_x,plot1_y, plot2_y : integer;
begin
plot1_x:=10;
plot2_x:=40;
plot1_y:=10;
plot2_y:=50;
DestRect.Left:=plot1_x;
DestRect.right:=plot2_x;
DestRect.top:=plot1_y;
DestRect.Bottom:=plot2_y;
SourceRect:=DestRect;
DestRect:=rect(0,0,plot2_x-plot1_x,plot2_y-plot1_y) ;
label1.canvas.copyrect(DestRect,Image1.Picture.Bitmap.canvas,SourceRect);
end;
我试过了,没问题。
注意:Image里的图象必须是bmp格式的。
另外:TBitMap.Create是不返回值的。
var
DestRect,SourceRect:Trect;
plot1_x,plot2_x,plot1_y, plot2_y : integer;
begin
plot1_x:=10;
plot2_x:=40;
plot1_y:=10;
plot2_y:=50;
DestRect.Left:=plot1_x;
DestRect.right:=plot2_x;
DestRect.top:=plot1_y;
DestRect.Bottom:=plot2_y;
SourceRect:=DestRect;
DestRect:=rect(0,0,plot2_x-plot1_x,plot2_y-plot1_y) ;
label1.canvas.copyrect(DestRect,Image1.Picture.Bitmap.canvas,SourceRect);
end;
我试过了,没问题。
注意:Image里的图象必须是bmp格式的。
另外:TBitMap.Create是不返回值的。
#5
看樓主的代碼,好象沒有什麼問題
看看是不是你的image2的圖形的問題?
看看是不是你的image2的圖形的問題?
#6
为什么设置了断点,图象就出不来了?
#7
有没有高手知道,如何让拷出来的图类似一个独立对象(能够在labe1.canvas上拖动)?
#8
那就不能copy了,这个copyRect方法实际上是WindowsAPI,它只能在指定的Canvas的指定位置画出来,如果一旦被别别的窗口盖住,就必须重画才能出现。
#9
另外:TBitMap.Create是不返回值的。//呵呵,写错了
方法一会儿再贴
方法一会儿再贴
#10
procedure TForm1.Button2Click(Sender: TObject);
var
DestRect,SourceRect:Trect;
plot1_x,plot2_x,plot1_y, plot2_y : integer;
begin
plot1_x:=10;
plot2_x:=40;
plot1_y:=10;
plot2_y:=50;
DestRect.Left:=plot1_x;
DestRect.right:=plot2_x;
DestRect.top:=plot1_y;
DestRect.Bottom:=plot2_y;
SourceRect:=DestRect;
DestRect:=rect(0,0,plot2_x-plot1_x,plot2_y-plot1_y);
Image2.Width := plot2_x-plot1_x;
Image2.Height := plot2_y-plot1_y;
Image2.Canvas.CopyRect(DestRect,Image1.Picture.Bitmap.canvas,SourceRect);
Image2.Picture.SaveToFile(ExtractFileDir(Application.ExeName) + '\temp.bmp');
Image2.Picture.LoadFromFile(ExtractFileDir(Application.ExeName) + '\temp.bmp');
end;
var
DestRect,SourceRect:Trect;
plot1_x,plot2_x,plot1_y, plot2_y : integer;
begin
plot1_x:=10;
plot2_x:=40;
plot1_y:=10;
plot2_y:=50;
DestRect.Left:=plot1_x;
DestRect.right:=plot2_x;
DestRect.top:=plot1_y;
DestRect.Bottom:=plot2_y;
SourceRect:=DestRect;
DestRect:=rect(0,0,plot2_x-plot1_x,plot2_y-plot1_y);
Image2.Width := plot2_x-plot1_x;
Image2.Height := plot2_y-plot1_y;
Image2.Canvas.CopyRect(DestRect,Image1.Picture.Bitmap.canvas,SourceRect);
Image2.Picture.SaveToFile(ExtractFileDir(Application.ExeName) + '\temp.bmp');
Image2.Picture.LoadFromFile(ExtractFileDir(Application.ExeName) + '\temp.bmp');
end;
#1
沒在label上加過圖像﹐也想學習學習﹐幫你頂先
#2
楼主,我用你的代码测试了一下,没有问题,可以在label上显示image2的bmp位图。
不知你那里出了什么问题。不会是你的image2根本没有装载位图吧?
下面是我测试的代码。
procedure TForm1.Button1Click(Sender: TObject);
var
DestRect,SourceRect:Trect;
plot1_x,plot2_x,plot1_y,plot2_y: integer;
begin
plot1_x:=10 ;
plot2_x:=40 ;
plot1_y:=10 ;
plot2_y:=50;
DestRect.Left:=plot1_x;
DestRect.right:=plot2_x;
DestRect.top:=plot1_y;
DestRect.Bottom:=plot2_y;
SourceRect:=DestRect;
DestRect:=rect(0,0,plot2_x-plot1_x,plot2_y-plot1_y);
label1.canvas.copyrect(DestRect,Image2.Picture.Bitmap.canvas,SourceRect);
end;
不知你那里出了什么问题。不会是你的image2根本没有装载位图吧?
下面是我测试的代码。
procedure TForm1.Button1Click(Sender: TObject);
var
DestRect,SourceRect:Trect;
plot1_x,plot2_x,plot1_y,plot2_y: integer;
begin
plot1_x:=10 ;
plot2_x:=40 ;
plot1_y:=10 ;
plot2_y:=50;
DestRect.Left:=plot1_x;
DestRect.right:=plot2_x;
DestRect.top:=plot1_y;
DestRect.Bottom:=plot2_y;
SourceRect:=DestRect;
DestRect:=rect(0,0,plot2_x-plot1_x,plot2_y-plot1_y);
label1.canvas.copyrect(DestRect,Image2.Picture.Bitmap.canvas,SourceRect);
end;
#3
c
#4
procedure TForm1.Button1Click(Sender: TObject);
var
DestRect,SourceRect:Trect;
plot1_x,plot2_x,plot1_y, plot2_y : integer;
begin
plot1_x:=10;
plot2_x:=40;
plot1_y:=10;
plot2_y:=50;
DestRect.Left:=plot1_x;
DestRect.right:=plot2_x;
DestRect.top:=plot1_y;
DestRect.Bottom:=plot2_y;
SourceRect:=DestRect;
DestRect:=rect(0,0,plot2_x-plot1_x,plot2_y-plot1_y) ;
label1.canvas.copyrect(DestRect,Image1.Picture.Bitmap.canvas,SourceRect);
end;
我试过了,没问题。
注意:Image里的图象必须是bmp格式的。
另外:TBitMap.Create是不返回值的。
var
DestRect,SourceRect:Trect;
plot1_x,plot2_x,plot1_y, plot2_y : integer;
begin
plot1_x:=10;
plot2_x:=40;
plot1_y:=10;
plot2_y:=50;
DestRect.Left:=plot1_x;
DestRect.right:=plot2_x;
DestRect.top:=plot1_y;
DestRect.Bottom:=plot2_y;
SourceRect:=DestRect;
DestRect:=rect(0,0,plot2_x-plot1_x,plot2_y-plot1_y) ;
label1.canvas.copyrect(DestRect,Image1.Picture.Bitmap.canvas,SourceRect);
end;
我试过了,没问题。
注意:Image里的图象必须是bmp格式的。
另外:TBitMap.Create是不返回值的。
#5
看樓主的代碼,好象沒有什麼問題
看看是不是你的image2的圖形的問題?
看看是不是你的image2的圖形的問題?
#6
为什么设置了断点,图象就出不来了?
#7
有没有高手知道,如何让拷出来的图类似一个独立对象(能够在labe1.canvas上拖动)?
#8
那就不能copy了,这个copyRect方法实际上是WindowsAPI,它只能在指定的Canvas的指定位置画出来,如果一旦被别别的窗口盖住,就必须重画才能出现。
#9
另外:TBitMap.Create是不返回值的。//呵呵,写错了
方法一会儿再贴
方法一会儿再贴
#10
procedure TForm1.Button2Click(Sender: TObject);
var
DestRect,SourceRect:Trect;
plot1_x,plot2_x,plot1_y, plot2_y : integer;
begin
plot1_x:=10;
plot2_x:=40;
plot1_y:=10;
plot2_y:=50;
DestRect.Left:=plot1_x;
DestRect.right:=plot2_x;
DestRect.top:=plot1_y;
DestRect.Bottom:=plot2_y;
SourceRect:=DestRect;
DestRect:=rect(0,0,plot2_x-plot1_x,plot2_y-plot1_y);
Image2.Width := plot2_x-plot1_x;
Image2.Height := plot2_y-plot1_y;
Image2.Canvas.CopyRect(DestRect,Image1.Picture.Bitmap.canvas,SourceRect);
Image2.Picture.SaveToFile(ExtractFileDir(Application.ExeName) + '\temp.bmp');
Image2.Picture.LoadFromFile(ExtractFileDir(Application.ExeName) + '\temp.bmp');
end;
var
DestRect,SourceRect:Trect;
plot1_x,plot2_x,plot1_y, plot2_y : integer;
begin
plot1_x:=10;
plot2_x:=40;
plot1_y:=10;
plot2_y:=50;
DestRect.Left:=plot1_x;
DestRect.right:=plot2_x;
DestRect.top:=plot1_y;
DestRect.Bottom:=plot2_y;
SourceRect:=DestRect;
DestRect:=rect(0,0,plot2_x-plot1_x,plot2_y-plot1_y);
Image2.Width := plot2_x-plot1_x;
Image2.Height := plot2_y-plot1_y;
Image2.Canvas.CopyRect(DestRect,Image1.Picture.Bitmap.canvas,SourceRect);
Image2.Picture.SaveToFile(ExtractFileDir(Application.ExeName) + '\temp.bmp');
Image2.Picture.LoadFromFile(ExtractFileDir(Application.ExeName) + '\temp.bmp');
end;