程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> GdiPlus[49]: 圖像(一) 概覽

GdiPlus[49]: 圖像(一) 概覽

編輯:Delphi

三個主要的圖像相關接口是: 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; 


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved