Я столкнулся со странной проблемой при использовании Graphics.DrawImage.
При использовании e.Graphics.DrawImage(Image, Point) в OnPaint для рисования «буфера» растрового изображения в элементе управления кажется, что части изображения опущены. Буфер заполняется вспомогательным методом, который обращается непосредственно к Bitmap, используя Graphics, созданный из него. Когда элемент управления рисует, кэшированное растровое изображение отображается на элементе управления.
Кажется, что в самом растровом изображении ничего не пропущено, потому что, когда я сохранил растровое изображение на диск и исследовал его, все было там. (см. изображения ниже)
Вот как выглядит буфер растрового изображения:
(источник: zachjohnson.net)
Вот что отображается на элементе управления:
(источник: zachjohnson.net)
Это все, что я делаю в OnPaint:
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
if (this.bufferInvalid)
{
this.UpdateBuffer();
}
if (this.buffer != null)
{
e.Graphics.DrawImage(this.buffer, Point.Empty);
}
}