2009-02-16 2 views
0

Итак, я прочитал, что StretchBlt может зеркально отображать изображения по горизонтали и/или по вертикали, отрицая параметры nWidthSrc/Dest и nHeightSrc/Dest. Мне нужна эта функциональность без накладных расходов на производительность StretchBlt. Я попробовал ту же технику с BitBlt, но это не сработало.Win32 BitBlt - зеркальное изображение по горизонтали

Есть ли способ отразить изображение с чем-то простым, как BitBlt, без переполнения StretchBlt? Или StretchBlt не влияет на производительность, если исходные и конечные размеры одинаковы?

ответ

2

BitBlt будет выполнять только математические операции (или, xor и т. д.) на отдельных пикселях, это не изменит размер изображения. Это именно то, что StretchBlt для, и StretchBlt (по сравнению с любой другой графической операцией изменения размера) безумно быстр, как в в большинстве случаев он может использовать графическую карту для ускорения ее производительности.

0

Чтобы зеркально отразить изображение, вам просто нужно прокрутить пиксели в обратном порядке. Такие, как, если вы хотите, чтобы отразить по горизонтали вам просто нужно сделать следующее:

  1. развернуть холст изображения, чтобы удвоить размер
  2. начала в нижней части изображения и работать вам путь до написания пикселей в к зеркальная область сверху вниз.
  3. сделать шаг 3 слева направо.

Я не знаю, какой язык вы используете, но большинство из них позволяет вам манипулировать пикселями или битами на индивидуальной основе с использованием GDI.

1

Все функции Win32, вероятно, будут чрезвычайно оптимизированы.

Что заставляет вас думать, что StretchBlt будет большим хитом производительности?

Вы профилировали свое приложение с помощью StretchBlt?

Вы можете полностью изменить все данные растрового изображения и посмотреть, можете ли вы сделать лучше, чем StretchBlt.

Вот ссылка, которая может помочь вам:

http://www.codeguru.com/cpp/g-m/bitmap/specialeffects/article.php/c1739

0

Ни в коем случае вы собираетесь быть более эффективным, чем StretchBlt, если вы не знаете некоторую дополнительную информацию об изображении (например, есть граница так что вам не нужно переворачивать определенные пиксели.