图象显示不出来

时间:2021-09-07 08:49:57
执行如下代码后,copy 的部分图片在label上显示不出来,是何原因
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;

#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是不返回值的。

#5


看樓主的代碼,好象沒有什麼問題

看看是不是你的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;

#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;

#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是不返回值的。

#5


看樓主的代碼,好象沒有什麼問題

看看是不是你的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;