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

#c# #.net #windows #graphics #gdi

#c# #.net #Windows #графика #gdi

Вопрос:

Я выполняю рендеринг изображения в системе.Рисование.Растровое изображение и последующее рисование его в окне, однако я вижу, что края сглаживаются. Как это предотвратить?

Еще немного подробностей. Растровое изображение создается следующим образом:

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

Затем я задаю пикселям любой цвет.Черный или цветной.Белый. Я пробовал использовать как Bitmap.SetPixel, так и записывать байты непосредственно в растровые данные с помощью Bitmap.Блокировки.

Как только растровое изображение готово, я рисую его в своей форме.Переопределение OnPaint:

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

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

Ответ №1:

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

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

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

Комментарии:

1. Я почти уверен, что большинство людей хотят половину PixelOffsetMode .