用Delphi实现24位真彩色图标
http://tech.ddvip.com 2006年08月01日 社区交流
本文详细介绍用Delphi实现24位真彩色图标
有了文件头,最终可以生成ICO了,同样详细内容请看程序的注释。
function TFormMain.MakICOData( Mem:TStream): Boolean;
var
Mem1,Mem2:TMemoryStream;
Size:Longint;
BmtMapHandle2:TBitmapInfoHeader;
begin
Mem1:=TMemoryStream.Create;
Mem2:=TMemoryStream.Create;
Size:=Mem.Size-14;//跳过14字节的BMP文件由文件头
Mem.Position:=14;
try
Mem1.SetSize(Size);
Mem.Read(Mem1.Memory^,Size);//BMP到Mem1
Mem1.Seek(0,soFromBeginning);
Mem1.Read(BmtMapHandle2,sizeof(TBitmapInfoHeader));//BMP文件的信息头
Mem2.SetSize(Size-40);//跳过40字节的BMP文件信息头
FillChar(Mem2.Memory^,Size-40,$0);//Mem2填充0 ,使掩码效果为白色
Mem2.Position:=0;
BmtMapHandle2.biHeight:=IconHand.idEntries.bHeight *2;//有两幅图
BmtMapHandle2.biSizeImage:=Mem2.Size*2;
Mem1.Seek(0,soFromBeginning);
Mem1.Write(BmtMapHandle2,sizeof(TBitmapInfoHeader));
Mem1.Position:=0;
Mem.Size:=0;
//MS.SetSize(0);
Mem.Write(IconHand,sizeof(tagIconDir){22});//写ICO文件头
Mem.Write(Mem1.Memory^,Mem1.Size);//写BMP片
Mem.Write(Mem2.Memory^,Mem2.Size);//写掩码
Result:=True;
finally
FreeAndNil(Mem1);
FreeAndNil(Mem2);
end;
end;
结束语
目前Delphi支持的图片格式比较多,例如我们可以给程序加上uses jpeg 语句就可以支持Jpeg格式的图像,当然如你给Delphi安装了支持其他图像格式的控件,使用本程序照样可以转换,得到的ICO文件可以供VB、Delphi等调用。程序的调试环境为Delphi7+WinxpSp2。
来源:计算机与信息技术 作者:李金刚 责编:豆豆技术应用