首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

头快炸了解决方案

2012-09-17 
头快炸了D7下怎么实现ICON转PNG,用GDI+先将ICON转为BMP,再保存为PNG,但是不能是实现透明,代码如下,望指教,

头快炸了
D7下怎么实现ICON转PNG,用GDI+先将ICON转为BMP,再保存为PNG,但是不能是实现透明,代码如下,望指教,找了好久好多资料
,人都快疯了,救救我吧,如果意见采纳,分全给他了
procedure SaveTofile(icon : TBitmap;aFile : string);
var
  Gpbmp: TGpBitmap;
  CLSID : TGUID;
  Parameters: TEncoderParameters;
  Quality: Integer;
begin
  if GetEncoderClsid('image/png',CLSID) <> - 1 then
  begin
  Gpbmp := TGpBitmap.Create(icon.Handle, icon.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;

function IcoFiletoPNG(const Source, Dest: String): Boolean;
var
  icon: TIcon;
  Bitmap: TBitmap; 
begin
  Result := True;
  icon := TIcon.Create;
  Bitmap := TBitmap.Create;
  try
  try
  icon.LoadFromFile(Source);
  Bitmap.Width := Icon.Width;
  Bitmap.Height := Icon.Height;
  Bitmap.Canvas.Draw(0, 0, Icon);
  SaveTofile(Bitmap, Dest);
  except
  Result := False;
  end;
  finally
  icon.Free;
  Bitmap.Free;
  end;
end;

[解决办法]
这个问题呢,
基本上思路是这样的,
新建一个GDI+位图,在这个位图上创建一块画布,画布大小和Icon的大小一致,
把Icon画在这块画布上,再将这个GDI+位图保存成Png图片文件即可
(代码基本逻辑如下,你转换一下)
procedure ConvertIconToPng(AIcon:TIcon;APngFile:String);
var
APngGPBitmap:IGPBitmap;
AIconGPBitmap:IGPBitmap;
APngGraphics:IGPGraphics;
begin
AIconGPBitmap:=TGPBitmap.Create(AIcon.Handle);
APngGPBitmap:=TGPBitmap.Create(AIconGPBitmap.Width,AIconGPBitmap.Height);
APngGraphics:=TGPGraphics.Create(APngGPBitmap);
APngGraphics.DrawImage(AIconGPBitmap,0,0);
APngGPBitmap.Save(APngFile,TGPImageFormat.Png);
end;
[解决办法]
我在测试楼上的代码中

热点排行