Графический объект не очищается правильно - PullRequest
1 голос
/ 22 июля 2010

У меня есть растровое изображение под названием «буфер», к которому я

  1. Нарисуйте другое изображение (используя DrawImage)
  2. Рисование частично прозрачного градиента (с использованием LinearGradientBrush)

Я вызываю Flush(FlushIntention.Sync) для объекта Graphics буфера после каждого из этих шагов. Затем я рисую содержимое буфера на экранном элементе управления.

Однако во время отладки я заметил, что иногда в буфере не отображается градиент. Что может быть причиной пропуска 2-й операции рисования, даже если я явно вызываю синхронизированную команду очистки?

Есть ли обходной путь?

РЕДАКТИРОВАТЬ: Пример кода

Bitmap background = ....;
Bitmap buffer = new Bitmap(100, 100);
Rectangle bufferBounds = new Rectangle(0, 0, buffer.Width, buffer.Height);
Graphics bufferG = Graphics.FromImage(buffer);

// First step
bufferG.DrawImageUnscaled(background, 0, 0);
bufferG.Flush(FlushIntention.Sync);

// Second step
LinearGradientBrush lgb = new LinearGradientBrush(bufferBounds,
                maxColor, minColor, LinearGradientMode.Vertical);
bufferG.FillRectangle(lgb, bufferBounds);
bufferG.Flush(FlushIntention.Sync);

1 Ответ

0 голосов
/ 28 июля 2010

Я заметил, что вы не создаете объект Graphics в блоке using.Может ли Dispose () понадобиться для полной очистки?

using (Graphics bufferG = Graphics.FromImage(buffer)
{
...
}
...