2010-03-06 71 views
2

我正在將較小的圖像(例如20x25)調整爲較大的圖像(例如150x170)。 我的問題不在於質量問題,正如預期的那樣,它有一些模糊性。我的問題是,邊框是在圖像的右側和底部創建淺色邊框。有沒有辦法可以將其刪除?使用C#圖形調整圖像大小時的質量問題類別

我的代碼如下:

using (Graphics g = Graphics.FromImage((Image)ResizedImage)) 
{ 
    g.CompositingQuality = CompositingQuality.HighQuality; 
    g.InterpolationMode = InterpolationMode.HighQualityBicubic; 
    g.SmoothingMode = SmoothingMode.HighQuality; 

    g.DrawImage(OrigImage, new Rectangle(0, 0, Width, Height), 
    new Rectangle(0, 0, OrigCImage.Width, OrigImage.Height), GraphicsUnit.Pixel); 
} 

的感謝!

+0

設置'g.SmoothingMode'什麼也不做在這裏,它僅適用於矢量繪圖方法,如'g.DrawLine()'或'g.DrawEllipse()' – alldayremix 2013-03-14 14:45:03

回答

1

也許嘗試加入

g.PixelOffsetMode = PixelOffsetMode.HighQuality; 
+0

通常,這不會完全解決問題。對於某些圖像,您還需要使用TileAndtribute實例和TileModeXY集合,並將其作爲DrawImage的最後一個參數傳遞。 – 2012-01-09 20:39:23

3

這個語句添加到代碼:

g.PixelOffsetMode = PixelOffsetMode.Half; 

現在你會得到一個形象,是所有4個方面同樣「光」。這並不能真正解決你的問題。但是這是相當不可避免的,插入器只是在位圖邊緣用完可用像素來做出更好的猜測。

將PixelOffsetMode保留爲其原始設置並故意將圖像繪製得太大以致邊緣效果不可見可能會更好。

這看起來很不錯:

protected override void OnPaint(PaintEventArgs e) { 
    e.Graphics.CompositingQuality = CompositingQuality.HighQuality; 
    e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; 
    e.Graphics.SmoothingMode = SmoothingMode.HighQuality; 
    Image img = Properties.Resources.progress; 
    int w = this.ClientSize.Width + this.ClientSize.Width/img.Width; 
    int h = this.ClientSize.Height + this.ClientSize.Height/img.Height; 
    Rectangle rc = new Rectangle(0, 0, w, h); 
    e.Graphics.DrawImage(img, rc); 
}