GdiPlus[49]: 图像(一) 概览


三个主要的图像相关接口是: IGPImage、IGPBitmap、IGPMetafile.

IGPBitmap、IGPMetafile 都是从 IGPImage 继承, 分别用于处理位图和图元文件.

还有从 IGPBitmap 继承的 IGPCachedBitmap 用于快速呈现图像.

IGPImage 的方法与属性:

//方法

IGPImage.Clone;                     { 克隆 }

IGPImage.Save();                    { 按指定格式保存到文件或流 }

IGPImage.SaveAdd();                 { 给许可多页的图像添加页 }

IGPImage.GetPhysicalDimension();    { 获取图像的大小(宽、高) }

IGPImage.GetBounds();               { 以指定单位获取图像的边界矩形 }

IGPImage.GetThumbnailImage();       { 获取缩略图 }

IGPImage.GetFrameDimensions;        { 获取一个 GUID 数组, 每个 GUID 代表一帧 }

IGPImage.GetFrameCount();           { 获取帧数 }

IGPImage.SelectActiveFrame();       { 选择指定索引的帧为当前帧 }

IGPImage.RotateFlip();              { 旋转图像 }

IGPImage.GetPropertyItem();         { 获取属性项 }

IGPImage.SetPropertyItem();         { 设置属性项 }

IGPImage.RemovePropertyItem();      { 删除属性项 }

IGPImage.GetEncoderParameterList(); { 获取图像编码器支持的参数信息 }



//属性

IGPImage.ImageType;            { 图像类型(Bitmap/Metafile/Unknown) }

IGPImage.Width;                { 宽度(单位是像素) }

IGPImage.Height;               { 高度(单位是像素) }

IGPImage.HorizontalResolution; { 获取水平分辨率(以"像素/英寸"为单位) }

IGPImage.VerticalResolution;   { 获取垂直分辨率(以"像素/英寸"为单位) }

IGPImage.Flags;                { 获取图像像素的属性标志 }

IGPImage.RawFormat;            { 获取图像的文件格式 }

IGPImage.PixelFormat;          { 获取图像的像素格式 }

IGPImage.Palette;              { 获取或设置调色板 }

IGPImage.PropertyIdList;       { 获取图像属性 ID 数组 }

IGPImage.PropertyItems;        { 获取图像属性集合 }


 
   

IGPBitmap 在 IGPImage 的基础上添加的方法与属性:

//方法

IGPBitmap.GetHBitmap();    { 创建 GDI 格式的 Bitmap 并返回句柄 }

IGPBitmap.GetHIcon;        { 创建 Icon 文件并返回句柄 }

IGPBitmap.LockBits();      { 锁定对象中内存中的像素数据 }

IGPBitmap.UnlockBits();    { 解除 LockBits 的锁定 }

IGPBitmap.SetResolution(); { 设置分辨率 }



//属性

IGPBitmap.Pixels;          { 获取或设置指定像素的颜色 }


 
   

IGPMetafile 在 IGPImage 的基础上添加的方法与属性:

//方法

IGPMetafile.GetMetafileHeader; { 获取 Metafile 的 MetafileHeader }

IGPMetafile.GetHEnhMetafile;   { 获取增强型 Metafile 的 Windows 句柄 }

IGPMetafile.PlayRecord();      { 播放单个图元文件记录 }



//属性

IGPMetafile.DownLevelRasterizationLimit; {  }


 
   

还有几个图像相关的公共内联函数:

function GetPixelFormatSize();     { 返回指定像素格式的颜色深度(每个像素的位数) }

function IsIndexedPixelFormat();   { 判断像素格式是否是索引的 }

function IsAlphaPixelFormat();     { 判断像素格式是否包含 alpha 信息 }

function IsCanonicalPixelFormat(); { 像素格式是否是每个像素 32 位(标准) }

function IsExtendedPixelFormat();  { 像素格式是否是每个像素 64 位 }


 
   

另外还有 IGPImageAttributes 等多个辅助接口.

上面提到过的 IGPCachedBitmap 没有自己独有的方法和属性, 下面的例子是它和 IGPBitmap 的对比测试:


//测试结果是 CachedBitmap 比 Bitmap 快 3 倍左右.

uses GdiPlus;



procedure TForm1.Button1Click(Sender: TObject);

const

  count = 1000;

var

  Graphic: IGPGraphics;

  Bitmap: IGPBitmap;

  CachedBitmap: IGPCachedBitmap;

  t1,t2,x,y: Cardinal;

  i: Integer;

begin

  Graphic := TGPGraphics.Create(Handle);

  Bitmap := TGPBitmap.Create('C:\GdiPlusImg\Texture.jpg');

  CachedBitmap := TGPCachedBitmap.Create(Bitmap, Graphic);

  x := ClientWidth - Bitmap.Width;

  y := ClientHeight - Bitmap.Height;



  t1 := GetTickCount;

  for i := 0 to count - 1 do

    Graphic.DrawImage(Bitmap, Random(x), Random(y));

  t1 := GetTickCount - t1;



  t2 := GetTickCount;

  for i := 0 to count - 1 do

    Graphic.DrawCachedBitmap(CachedBitmap, Random(x), Random(y));

  t2 := GetTickCount - t2;



  Text := Format('%d : %d', [t1, t2]);

end;


 
   

你可能感兴趣的:(dip)