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

GdiPlus[54]: 圖像(六) 圖像解碼與編碼

編輯:Delphi

 GDI+ 能夠打開某種格式的圖像, 就會有對應的解碼器; 能夠保存為某種格式, 也會有對應的編碼器.

  下面程序通過 IGPImageCodecInfoArray 與 IGPImageCodecInfo 獲取了 GDI+ 能夠編碼與解碼的格式:

uses GdiPlus; 
 
procedure TForm1.Button1Click(Sender: TObject); 
var 
 Encoders, Decoders: IGPImageCodecInfoArray; 
 Encoder, Decoder: IGPImageCodecInfo; 
begin 
 Memo1.Clear; 
 Memo1.Lines.Add('可編碼格式:'); 
 Encoders := TGPImageCodecInfo.GetImageEncoders; 
 for Encoder in Encoders do 
 begin 
  Memo1.Lines.Add(Encoder.FilenameExtension); 
 end; 
 
 Memo1.Lines.Add(EmptyStr); 
 Memo1.Lines.Add('可解碼格式:'); 
 Decoders := TGPImageCodecInfo.GetImageDecoders; 
 for Decoder in Decoders do 
 begin 
  Memo1.Lines.Add(Decoder.FilenameExtension); 
 end; 
end; 
{ 結果如下: 
 可編碼格式: 
 *.BMP;*.DIB;*.RLE 
 *.JPG;*.JPEG;*.JPE;*.JFIF 
 *.GIF 
 *.TIF;*.TIFF 
 *.PNG 
 
 可解碼格式: 
 *.BMP;*.DIB;*.RLE 
 *.JPG;*.JPEG;*.JPE;*.JFIF 
 *.GIF 
 *.EMF 
 *.WMF 
 *.TIF;*.TIFF 
 *.PNG 
 *.ICO 
} 

  編碼器(或解碼器)的所有屬性:

IGPImageCodecInfo.ClsId;       { 統一的 GUID 標識 } 
IGPImageCodecInfo.CodecName;     { 名稱 } 
IGPImageCodecInfo.DllName;      { } 
IGPImageCodecInfo.FilenameExtension; { 擴展名 } 
IGPImageCodecInfo.Flags;       { 標志 } 
IGPImageCodecInfo.FormatDescription; { 格式描述 } 
IGPImageCodecInfo.FormatId;     { 格式 ID } 
IGPImageCodecInfo.MimeType;     { 類型 } 
IGPImageCodecInfo.Version;      { 版本 } 

可以通過 TGPImageFormat 方便獲取指定類型的編碼器的統一 GUID 標識:

uses GdiPlus; 
 
procedure TForm1.Button1Click(Sender: TObject); 
var 
 E: IGPImageCodecInfo; 
begin 
 with Memo1.Lines do 
 begin 
  Clear; 
  { 通過 TGPImageCodecInfo 獲取編碼器的統一標識 } 
  for E in TGPImageCodecInfo.GetImageEncoders do 
  begin 
   Add(Format('%s - %s', [GUIDToString(E.ClsId), E.FormatDescription])); 
  end; 
 
  Add(EmptyStr); 
  { 通過 TGPImageFormat 獲取指定格式的編碼器的統一標識 } 
  Add(Format('%s - BMP', [GUIDToString(TGPImageFormat.Bmp.CodecId)])); 
  Add(Format('%s - JPEG', [GUIDToString(TGPImageFormat.Jpeg.CodecId)])); 
  Add(Format('%s - GIF', [GUIDToString(TGPImageFormat.Gif.CodecId)])); 
  Add(Format('%s - TIFF', [GUIDToString(TGPImageFormat.Tiff.CodecId)])); 
  Add(Format('%s - PNG', [GUIDToString(TGPImageFormat.Png.CodecId)])); 
 end; 
end; 
(* 結果是一樣的: 
 {557CF400-1A04-11D3-9A73-0000F81EF32E} - BMP 
 {557CF401-1A04-11D3-9A73-0000F81EF32E} - JPEG 
 {557CF402-1A04-11D3-9A73-0000F81EF32E} - GIF 
 {557CF405-1A04-11D3-9A73-0000F81EF32E} - TIFF 
 {557CF406-1A04-11D3-9A73-0000F81EF32E} - PNG 
 
 {557CF400-1A04-11D3-9A73-0000F81EF32E} - BMP 
 {557CF401-1A04-11D3-9A73-0000F81EF32E} - JPEG 
 {557CF402-1A04-11D3-9A73-0000F81EF32E} - GIF 
 {557CF405-1A04-11D3-9A73-0000F81EF32E} - TIFF 
 {557CF406-1A04-11D3-9A73-0000F81EF32E} - PNG 
*) 

  下面是把一個圖像文件分別保存(或叫編碼)為其他格式的例子:

uses GdiPlus; 
 
procedure TForm1.Button1Click(Sender: TObject); 
var 
 Image: IGPImage; 
begin 
 ChDir('C:\GdiPlusImg\'); 
 Image := TGPImage.Create('Bird.bmp'); 
 Image.Save('Bird_Jpeg.jpg', TGPImageFormat.Jpeg); 
 Image.Save('Bird_Gif.gif', TGPImageFormat.Gif); 
 Image.Save('Bird_Tiff.tif', TGPImageFormat.Tiff); 
 Image.Save('Bird_Png.png', TGPImageFormat.Png); 
 Image.Save('Bird_Bmp.bmp', TGPImageFormat.Bmp); 
end; 

  圖像編碼時還有一些參數, 譬如保存不同質量的 jpg(壓縮級別).



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