急!急!是不是image控件没有handle?若有,怎样取得?(100分)

  • 主题发起人 主题发起人 chemstar
  • 开始时间 开始时间
C

chemstar

Unregistered / Unconfirmed
GUEST, unregistred user!
 我做了一个有关OpenGL的程序,是将一个三维的图形画在了Panel上。现在我想将它画在
iamge上,并用image1.Picture.SaveToFile将它上面的图形存下来。但是我没有办法取得
image的handle,也就没有办法在image上做3D图形。请高手赐教。
 
Image1.pciture.bitmap.canvas.handle.
试过吗?
 
Image1是TGraphic类的子类,没有句柄.
可以用GetDC取得Panel的HDC再用Bitblt将其拷贝到Image上,再保存.
 
to DarwinZhang:
也就是说无法用OpenGL在Image上作图了?那么如果用Bitblt的话, 请问怎么来具体操作?
我是说详细的语句怎么来写?
 
用PaintTo就行:
procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Width := Panel1.Width;
Image1.Height := Panel1.Height;
Panel1.PaintTo(Image1.Canvas,0,0);
end;
 
Image1.canvas.handle:=hrgn
试试!
 
iamge是图形控件,从graphic control继承下来的,
不过,它有一个设备句柄hdc,可以通过相关的api和这个句柄来
往上画东西
 
用image1.canvas.handle
有了画板的句柄,应该就可以画了
 
比如你在Panel上画了一个图形,如下可以将图形保存到文件中,没有必要用Image控件:

procedure SavePanelPicToFile(Panel:TPanel; FileName:String);
var
dc:HDC;
BMP:TBitmap;
begin
dc:=GetDC(Panel.Handle);
BMP:=TBitmap.Create;
BMP.Width:=Panel.Width;
BMP.Height:=Panel.Height;
BitBlt(BMP.Canvas.Handle,0,0,BMP.Width,BMP.Height,dc,0,0,SrcCopy);
BMP.SaveToFile(FileName);
BMP.Free;
ReleaseDC(Panel.Handle,dc);
end;

使用时将Panel和文件名输入:
SavePanelPicToFile(Panel1,'Test.bmp');
就将图形保存到Test.bmp中了.
 
如果我PANEL上的图形太大,只能通过滚动条拖动才能看见,这样保存后的图形就有点残却不全了!
 
我有一个控件,继承自Panel,不过加了一个Picture属性,所以和Image控件一样用,
当然肯定有句柄了,不知能不能满足你的要求。
用法也很简单:
PicPanel1.Picture.SaveToFile('g:/temp.jpg');
不过只能保存成jpg文件,当然可以通过TBitmap和TJpegImage转换成Bmp文件
 
多人接受答案了。
 
后退
顶部