Нежелательное сглаживание при рисовании растрового изображения в окне

Я визуализирую изображение в 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
                )

Каждый пиксель должен быть черным или белым, однако я вижу, что пиксели по краям серые.


person jon-hanson    schedule 09.04.2011    source источник


Ответы (1)


Установите для свойства InterpolationMode значение NearestNeighbor, а для PixelOffsetMode - значение None.

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

Лучше всего рисовать немасштабированное растровое изображение. В этом случае вы, вероятно, захотите использовать свойства ClientSize.Width и Height для инициализации растрового изображения. Скорее всего, вы делаете растровое изображение слишком большим прямо сейчас, добавляя границу и заголовок формы. Я не могу сказать по фрагменту.

person Hans Passant    schedule 09.04.2011
comment
Я почти уверен, что большинство людей хотят половину PixelOffsetMode. - person Bitterblue; 26.05.2014