2011-01-10 67 views
1

我使用簡單的重新調整大小的方法來將我的位圖更改爲新的大小。 原始位大小爲320×240,我改變大小的兩倍重新調整位圖後,新位圖的結果是平滑的bitmnap

  • 爲250x160
  • 做一些工藝上的位圖
  • 改回爲320×240

我發現後我將它改回320x240我發現位圖很平滑,而不是我的例外。

我該如何避免這種光滑的出現?

調整大小的方法:

private static Image resizeImage(Image imgToResize, Size size) 
{ 

    int sourceWidth = imgToResize.Width; 
    int sourceHeight = imgToResize.Height; 

    float nPercent = 0; 
    float nPercentW = 0; 
    float nPercentH = 0; 

    nPercentW = ((float)size.Width/(float)sourceWidth); 
    nPercentH = ((float)size.Height/(float)sourceHeight); 

    if (nPercentH < nPercentW) 
     nPercent = nPercentH; 
    else 
     nPercent = nPercentW; 

    int destWidth = (int)(sourceWidth * nPercent); 
    int destHeight = (int)(sourceHeight * nPercent); 

    Bitmap b = new Bitmap(destWidth, destHeight); 
    Graphics g = Graphics.FromImage((Image)b); 
    g.InterpolationMode = InterpolationMode.HighQualityBicubic; 

    g.DrawImage(imgToResize, 0, 0, destWidth, destHeight); 
    g.Dispose(); 

    return (Image)b; 
} 
+0

縮放圖像總是會導致一些缺乏質量。你爲什麼要把它做得更小,然後想把它改回原來的大小?目前還不清楚你是否想要平滑效果,或者想知道爲什麼你的圖像質量下降。 – 2011-01-10 09:35:26

回答

2

由於您使用的是HighQualityBicubic插值模式,圖像將被預先過濾並使用盡可能高的質量調整大小,從而產生「平滑效果」。

你可以嘗試InterpolationMode屬性設置爲NearestNeighbor獲得「粗糙」的結果:

Bitmap b = new Bitmap(destWidth, destHeight); 
using (Graphics g = Graphics.FromImage((Image) b)) { 
    g.InterpolationMode = InterpolationMode.NearestNeighbor; 
    g.DrawImage(imgToResize, 0, 0, destWidth, destHeight); 
} 
+0

謝謝,但我試圖改變InterpolationMode - 這不是幫助:( – Yanshof 2011-01-10 09:55:06

5

可悲的是,你不能。 當您將位圖調整爲較小的尺寸時,信息將丟失。並且從小圖像(使用較少信息)插入信息以創建具有原始大小的新的重新尺寸的圖像。正是這種插值可以使得圖像更加平滑。

要避免這種情況,您唯一能做的就是找到一種方法來處理您必須的處理過程,而無需調整圖像大小。