GDI + рисует только монохромный на памяти DC - PullRequest
6 голосов
/ 17 февраля 2012

Я пытаюсь сделать некоторую двойную буферизацию в приложении MFC и пытаюсь нарисовать память DC с помощью GDI +.Однако, хотя я вызвал CreateCompatibleDC (), я получаю только монохромное изображение.Вот код:

CDC bufferDC;
CBitmap bufferBitmap;
bufferDC.CreateCompatibleDC(&dc);
bufferBitmap.CreateCompatibleBitmap(&bufferDC, 300, 300);
bufferDC.SelectObject(bufferBitmap);
Graphics g(bufferDC);
g.Clear(Color::Green);
dc.BitBlt(0, 0, 300, 300, &bufferDC, 0, 0, SRCCOPY);

Вместо зеленого пятна я вижу прямоугольник из размытых черных и белых точек.Я даже пытался сохранить растровое изображение на диск после вызова g.Clear ().Это действительно файл глубиной 1 бит.

Есть идеи, что пошло не так?Спасибо.

Ответы [ 3 ]

12 голосов
/ 17 февраля 2012

Распространенная ошибка. Контроллер памяти приобретает свойства выбранного растрового изображения, независимо от того, с какой совместимостью он был создан. Растровое изображение по умолчанию, выбранное для DC, является монохромным. Если вы создадите растровое изображение, совместимое с этим DC, оно также будет монохромным.

Создайте растровое изображение для совместимости с исходным DC, а не с DC памяти.

0 голосов
/ 17 февраля 2012

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

0 голосов
/ 17 февраля 2012

И битовая карта, и буфер DC должны быть совместимы с dc (независимо от того, к какому устройству оно относится), а не с битовой картой ... с собственным DC.

Попробуйте передать &dc CreateCopmpatibleBitmap.

...