2011-04-09 64 views
3

我渲染圖像到System.Drawing.Bitmap,然後繪製成一個窗口上繪製位圖,但是我可以看到邊緣被反走樣。如何防止這一點?不希望抗鋸齒時的窗口

一些更多的細節。該位圖被創建像這樣的:

new Bitmap (this.Width, this.Height, Imaging.PixelFormat.Format32bppArgb) 

我然後組像素要麼Color.Black或Color.White。我已經嘗試使用Bitmap.SetPixel並使用Bitmap.LockBits將字節直接寫入位圖數據。

一旦該位圖好了,我把它收回去我Form.OnPaint覆蓋:

  pea.Graphics.DrawImage 
       (!this.bitmap 
       , this.ClientRectangle 
       , new Rectangle (0, 0, this.Width, this.Height) 
       , GraphicsUnit.Pixel 
       ) 

每個像素應該黑色或白色,但是我可以看到,在邊緣處的像素是灰色的。

回答

9

設置InterpolationMode屬性最近鄰和PixelOffsetMode爲無。

pea.Graphics.InterpolationMode = InterpolationMode.NearestNeighbor; 
pea.Graphics.PixelOffsetMode = PixelOffsetMode.None; // or PixelOffsetMode.Half 

繪製未縮放的位圖是最好的。在這種情況下,您可能需要使用ClientSize.Width和Height屬性來初始化位圖。通過包含表單的邊框和標題,現在可能會使位圖太大。我無法從片段中看出來。

+1

同時使用你的建議的工作。謝謝。 – 2011-04-09 18:06:53

+1

我敢肯定大多數人想的一半'PixelOffsetMode'。 – Bitterblue 2014-05-26 10:05:40