2012-07-12 58 views
3

我有一張我想放大的灰度圖像,以便我可以更好地看到各個像素。我試過將Smoothing模式設置爲none和一些不同的插值模式(就像這裏的其他問題所建議的那樣),但是這些圖像對我來說似乎仍然顯示出來,就好像它們在屏幕上顯示之前仍然在進行某種混合。如何在C#中調整位圖圖像而不進行混合或過濾?

基本上如果我有一個形象,是

(White, White, 
White, Black) 

我想,當我放大說6x6的,它看起來像

(White, White, White, White, White, White 
    White, White, White, White, White, White 
    White, White, White, White, White, White 
    White, White, White, Black, Black, Black 
    White, White, White, Black, Black, Black 
    White, White, White, Black, Black, Black) 

與黑色和白色區域之間沒有褪色,應該看起來像一個正方形。圖像應該看起來更「像素化」,而不是「模糊」

+0

什麼是您的源和目標分辨率? – ken2k 2012-07-12 16:34:34

回答

7

嘗試設置插值模式:

g.InterpolationMode = InterpolationMode.NearestNeighbor; 
+0

這似乎接近,但不完全正確。從一個2×2像素的方塊開始,我最終有四個不同地區,但他們並不都看起來是相同的大小 – hrh 2012-07-12 19:56:15

+3

想通了,我還需要添加:g3.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Half; – hrh 2012-07-12 20:12:12

+0

@hrh你真是太棒了 – 2016-05-28 12:31:58

1

可能會有這種幫助!

http://www.codeproject.com/Articles/191424/Resizing-an-Image-On-The-Fly-using-NET

否則可以請你實現這個方法,看看它是否適合你?

private static Bitmap ResizeBitmap(Bitmap sourceBMP, int width, int height) 
{ 
      Bitmap result = new Bitmap(width, height); 
      using (Graphics g = Graphics.FromImage(result)) 
       g.DrawImage(sourceBMP, 0, 0, width, height); 
      return result; 
} 
+0

這是我已經嘗試過的方法之一=( – hrh 2012-07-12 18:25:42

+0

得到它的工作我也使用這與拉曼的答案以及 – hrh 2012-07-12 20:11:25

5

我也一直在尋找做同樣的事情。當我發現這個問題時,沒有回答的是我正在尋找的東西,但他們合起來了。這就是讓我到了我想成爲的地方,從我的問題中可以告訴你想要什麼的地方。

private Bitmap ResizeBitmap(Bitmap sourceBMP, int width, int height) 
{ 
    Bitmap result = new Bitmap(width, height); 
    using (Graphics g = Graphics.FromImage(result)) 
    { 
     g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; 
     g.DrawImage(sourceBMP, 0, 0, width, height); 
    } 
    return result; 
} 
+3

有點你的代碼的解釋應該可以幫助作者快速理解 – AYK 2012-09-21 05:33:13

+0

非常感謝你這樣做,花了幾個小時試圖弄清楚,試圖將'bmp'轉換爲'graphics'並且回到'bmp'以便利用'InterpolationMode',但是你的方法使它在絕對沒有壓縮的情況下工作!謝謝! – theGreenCabbage 2014-01-08 22:01:33