用Delphi实现24位真彩色图标

http://tech.ddvip.com   2006年08月01日    社区交流

本文详细介绍用Delphi实现24位真彩色图标

  紧接着就是颜色表,用于说明位图中的颜色,它有若干个表项,每一个表项是一个RGBQUAD类型的结构,定义一种颜色。RGBQUAD结构的定义如下:

  tagRGBQUAD = packed record
rgbBlue:BYTE;// 蓝色的亮度(值范围为0-255)
rgbGreen:BYTE; // 绿色的亮度(值范围为0-255)
rgbRed:BYTE; // 红色的亮度(值范围为0-255)
rgbReserved:BYTE;// 保留,必须为0
end;

  颜色表中RGBQUAD结构数据的个数有biBitCount来确定:

  当biBitCount=1,4,8时,分别有2,16,256个表项;

  当biBitCount=24时,没有颜色表项。

  位图信息头和颜色表组成位图信息,BITMAPINFO结构定义如下:

  tagBITMAPINFO = packed record
bmiHeader :BITMAPINFOHEADER; // 位图信息头
bmiColors[0..0] :RGBQUAD; // 颜色表
End;
24位真彩色图形转化为ICO文件

  有了上面的基础知识,把24位真彩色图形转化为ICO文件就比较简单了,至于采用哪种编程语言,就看编程者的爱好了。下面笔者就采用Delphi实现本功能,进行详细介绍。

  上面讲的是把BMP格式的图像转换为ICO文件,因此,对于其他格式的图像我们要先把它转换为位图。在Delphi中我们可以采用如下方法:

  procedure TFormMain.Pic2BMP(Picture:TPicture);
var Bmp:TBitmap;
begin
 if not(Picture.Graphic is TBitmap)then//判断是否是BMP图像
 begin
  Bmp:=TBitmap.Create;//不是BMP图形,就生成一个
  try
   Bmp.Width:=Picture.Width;
   bmp.Height:=Picture.Height;
   bmp.Canvas.Draw(0,0,Picture.Graphic);//把其他格式的图像复制到BMP
   Picture.Graphic:=Bmp;//原始非BMP图像转换为BMP图像
  Finally
   Bmp.Free;
  end;
 end;
end;

来源:计算机与信息技术    作者:李金刚    责编:豆豆技术应用

正在加载评论...