Если вы хотите узнать, как перевернуть изображение слева направо, а не сверху вниз, вот как вы это сделаете.
Сначала скопируйте заголовки растрового изображения в другой файл.Затем выясните, сколько битов после imageWidth% 32 находятся в конце каждой строки сканирования:
orphanBits = imageWidth % 32
В приведенном ниже примере orphanedBits
равно 19. Считайте последние два DWORDS с концаотсканируйте в два регистра общего назначения:
ebx = 10001010 11010101 00101010 10101010
eax = 01010101 01011000 00000000 00000000
END OF SCAN LINE ^
Используйте операнд SHRD для перемещения битов из ebx в ecx, пока весь регистр не заполнится:
shrd eax, ebx, orphanBits
ebx = 00000000 00000000 00010001 01011010
eax = 10100101 01010101 01001010 10101011
END OF SCAN LINE ^
Затем используйте следующий код дляпоменяйте местами биты eax
:
mov edx,eax
shr eax,1
and edx,055555555h
and eax,055555555h
lea eax,[2*edx+eax]
mov edx,eax
shr eax,2
and edx,033333333h
and eax,033333333h
lea eax,[4*edx+eax]
mov edx,eax
shr eax,4
and edx,0F0F0F0Fh
and eax,0F0F0F0Fh
shl edx,4
add eax,edx
bswap eax
eax = 11010101 01010010 10101010 10100101
^ END OF SCAN LINE
Запишите скорректированный DWORD (теперь в обратном порядке) в новое изображение.Повторяйте, пока не будет прочитана вся строка сканирования.Повторяйте до тех пор, пока не будут прочитаны все строки развертки.
Редактировать: Первоначально у меня был только bswap, прежде чем я вспомнил, что он поменял местами байты, а не биты.