系統測試 GDI+ 9 種 InterpolationMode 縮放算法的視覺品質差異,附完整枚舉說明與選擇指南。
| 常數值 | 名稱 | 數值 | 品質/速度 | 適用場景 |
|---|---|---|---|---|
| -1 | InterpolationModeInvalid | 無效/預設 | - | 不建議使用 |
| 0 | InterpolationModeDefault | 系統預設 | 平衡 | 一般用途 |
| 1 | InterpolationModeLowQuality | 低品質 | 最快 | 即時預覽、縮圖 |
| 2 | InterpolationModeHighQuality | 高品質 | 較慢 | 輸出品質優先 |
| 3 | InterpolationModeBilinear | 雙線性 | 快 | 縮放 > 50% 時 |
| 4 | InterpolationModeBicubic | 雙三次 | 中等 | 縮放 > 25% 時 |
| 5 | InterpolationModeNearestNeighbor | 最近鄰 | 極快 | 像素藝術、銳利邊緣 |
| 6 | InterpolationModeHighQualityBilinear | 高品質雙線性 | 較慢 | 縮小預篩選,高品質 |
| 7 | InterpolationModeHighQualityBicubic | 高品質雙三次 | 最慢 | 最高品質轉換 |
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,影響後續所有 DrawImageHighQualityBilinear/Bicubic 內建預篩選,大幅縮小時不會產生摩爾紋Bilinear/Bicubic 無預篩選,縮小超過閾值 (50%/25%) 品質驟降NearestNeighbor 保留硬邊緣,適合像素風格放大ItemIndex - 1 直接映射HighQualityBilinear (6) - 最佳平衡HighQualityBicubic (7)Bilinear (3) 或 LowQuality (1)NearestNeighbor (5)HighQualityBilinear (6) 批次處理理解 9 種插值模式的數學特性與效能特徵,是構建專業級圖像處理應用的必備知識。