如何将form上画的图形用gdi+存成png格式?

jdbca 2010-10-15 10:07:00
如题..
...全文
57 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
XD王 2010-10-16
  • 打赏
  • 举报
回复
帮你up下
mdejtod 2010-10-16
  • 打赏
  • 举报
回复
说明,如果用GDI+的方式 ,如果原图是32位的,那保存时,不会保存透明通道,采用GDI的方式,可以把透明通道也保存,代码如下

png.Assign(Bitmap);
png.CreateAlpha;
for i := 0 to png.Header.Height - 1 do
begin
pData := Bitmap.ScanLine[i];
for j := 0 to png.Header.Width - 1 do
png.AlphaScanline[i]^[j] := pData[j * 4 + 3];
end;

GDI+保存PNG格式代码:

procedure SaveTofile(Bitmap : TBitmap;aExt : string);
var Gpbmp : TGpBitmap;
CLSID : TGUID;
Parameters: TEncoderParameters;
Quality: Integer;
begin
if GetEncoderClsid('Image/' + aExt,CLSID) then
begin
Gpbmp := TGpBitmap.Create(Bitmap.Handle,Bitmap.Palette);
Parameters.Count := 1;
Parameters.Parameter[0].NumberOfValues := 1;
Quality := 100;
Parameters.Parameter[0].Value := @Quality;
Gpbmp.Save(aFile,CLSID,@Parameters);
FreeandNil(Gpbmp);
end;
end;
mdejtod 2010-10-16
  • 打赏
  • 举报
回复

var DC : HDC;
Bmp : TBitmap;
rc : TRect;
png : TPngObject;
begin
DC := GetDC(form1.Handle);
GetClipBox(DC,rc);
Bmp := Tbitmap.Create;
Bmp.Width := rc.right - rc.left;
Bmp.Height := rc.Bottom - rc.Top;
Bitblt(Bmp.Canvas.Handle,0,0,Bmp.Width,Bmp.Height,DC,0,0,SRCCOPY);
ReleaseDC(form1.Handle,DC);
Png := TPngObject.Create;
Png.Assign(Bmp);
Png.SaveToFile('a.png');
Bmp.Free;
Png.Free;
end;

1,185

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧