объединение блиц и рисунков gdi (не работают, моргает)

Я пытаюсь объединить текстуры Blit с рисунком GDI поверх него
(от

    void draw()
{
StretchDIBits(hdc, 0, 0, CLIENT_X, CLIENT_Y, 0, 0, BUF_X, BUF_Y, buffer, &bmi,    DIB_RGB_COLORS, SRCCOPY);
TextOut(hdc, 10, 10, "Hello World", 11);
}

GetDC один раз установил hdc во время установки, но это, вероятно, нормально; это выше, я запускаю как в режиме ожидания 100 раз в секунду, а также сообщение fron OnPain; и это не работает хорошо, потому что результат TextOut просто мигает, остальное все в порядке — кто-нибудь может дать мне несколько советов, как убрать это мигание и получить стабильный результат TextOut? много тнкс

1

Решение

Вам нужен «двойной буфер», чтобы избежать мигания.

Создать память DC CreateCompatibleDC выберите в нем растровое изображение с правильным размером, созданным с CreateCompatibleBitmap и краски в этой памяти ДК.

Когда ваша фотография готова — BitBlt это у тебя на окне ОК.

3

Другие решения

Это естественно. Вы рисуете DIB на DC. И сразу же вы рисуете текст, который (предположительно) размещен так, что его ограничивающий прямоугольник перекрывается с тем, который используется в StretchDIBits,

Простыми словами: вы рисуете что-то, а затем вы рисуете что-то еще в том же месте. Это будет мигать. Что еще ты ожидал?

Во избежание мигания следует использовать так называемую двойную буферизацию. Это означает:

  1. Создайте растровое изображение адекватного размера.
  2. Создать DC (так называемый DC памяти)
  3. Выберите этот растр в него.
  4. Нарисуйте свой DIB на этом DC (не тот, который вы изначально получили).
  5. Нарисуй свой текст.
  6. Наконец использовать BitBlt перенести изображение из растрового изображения на ваш начальный DC.
  7. Не забудьте почистить вещи: DeleteObject для DIB, DeleteDC для памяти DC.

При желании вы можете сохранить свое растровое изображение вместо того, чтобы создавать его каждый раз, когда вам нужно что-то нарисовать. Это лучше с точки зрения производительности: делать StretchXXXX плюс, рисование на экране из растрового изображения намного быстрее, чем рисование DIB (при условии, что видеокарта поддерживает 2D-ускорение).

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector