Win32 BitBlt - зеркальное отображение по горизонтали - PullRequest
0 голосов
/ 16 февраля 2009

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

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

Ответы [ 4 ]

2 голосов
/ 16 февраля 2009

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

1 голос
/ 16 февраля 2009

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

С чего вы взяли, что StretchBlt станет хитом высокой производительности?

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

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

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

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

0 голосов
/ 16 февраля 2009

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

0 голосов
/ 16 февраля 2009

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

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

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

...