Win32 BitBlt — зеркальное отображение по горизонтали

StackOverflow https://stackoverflow.com/questions/553424

  •  23-08-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

Другие советы

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top