首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

再學 GDI+ [89]:TGPImage 縮放插值算法對比 - InterpolationMode 完整測試

     編輯:Delphi

系統測試 GDI+ 9 種 InterpolationMode 縮放算法的視覺品質差異,附完整枚舉說明與選擇指南。

完整枚舉列表

常數值名稱數值品質/速度適用場景
-1InterpolationModeInvalid無效/預設-不建議使用
0InterpolationModeDefault系統預設平衡一般用途
1InterpolationModeLowQuality低品質最快即時預覽、縮圖
2InterpolationModeHighQuality高品質較慢輸出品質優先
3InterpolationModeBilinear雙線性快縮放 > 50% 時
4InterpolationModeBicubic雙三次中等縮放 > 25% 時
5InterpolationModeNearestNeighbor最近鄰極快像素藝術、銳利邊緣
6InterpolationModeHighQualityBilinear高品質雙線性較慢縮小預篩選,高品質
7InterpolationModeHighQualityBicubic高品質雙三次最慢最高品質轉換

核心測試代碼

procedure TForm1.FormPaint(Sender: TObject); 
var g: TGPGraphics; img: TGPImage; rt: TGPRectF; 
begin 
  g := TGPGraphics.Create(Self.Canvas.Handle); 
  img := TGPImage.Create('C:\temp\test.png'); 
  g.DrawImage(img, 4, 4, img.GetWidth, img.GetHeight); { 原圖 }
  
  rt := MakeRect(4+img.GetWidth+4, 4, img.GetWidth * 0.75, img.GetHeight * 0.75); { 75% 縮放 }
  g.SetInterpolationMode(ListBox1.ItemIndex - 1); { -1 到 7 }
  g.DrawImage(img, rt, 0, 0, img.GetWidth, img.GetHeight, UnitPixel); 
  
  img.Free; g.Free; 
end;

效果圖

插值算法對比效果

關鍵技術細節

  • SetInterpolationMode 作用於 TGPGraphics,影響後續所有 DrawImage
  • HighQualityBilinear/Bicubic 內建預篩選,大幅縮小時不會產生摩爾紋
  • Bilinear/Bicubic 無預篩選,縮小超過閾值 (50%/25%) 品質驟降
  • NearestNeighbor 保留硬邊緣,適合像素風格放大
  • ListBox 選項對應枚舉值 -1 到 7,ItemIndex - 1 直接映射

選擇建議

  1. 一般 UI 縮放:HighQualityBilinear (6) - 最佳平衡
  2. 高品質輸出/列印:HighQualityBicubic (7)
  3. 即時縮放預覽:Bilinear (3) 或 LowQuality (1)
  4. 像素藝術/遊戲素材:NearestNeighbor (5)
  5. 縮略圖生成:HighQualityBilinear (6) 批次處理

理解 9 種插值模式的數學特性與效能特徵,是構建專業級圖像處理應用的必備知識。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved