こんにちはここでは、8 bppの.BMPイメージを左右反転するコードを開発しました。 4の倍数だけでなく、どのような幅でも適切に扱うことができます。今度は同じコードを1 bppに変換する必要があります。 x86を使用したbmpイメージ(グレースケール)。難しい部分は、私は個々のビットを超過する方法を知っていないかもしれないということです。"8bpp .bmp image"を水平に反転させるコードを変更してx86の水平方向に "1bpp .bmp image"を反転する
section .text
global mirrorbmp8
mirrorbmp8:
push ebp
mov ebp, esp
push ebx
push esi
push edi
mov ebx, [ebp+12] ;width - without padding
and ebx, 11b
je init ;checking if there is a padding
mov edi, 4
sub edi, ebx
add [ebp+12], edi ;width - with padding
init:
mov ebx, [ebp+16]
;calculating the distance between top&bottom pixel
dec ebx
mov eax, [ebp+12]
mul ebx
mov esi, eax
mov edi, [ebp+8] ;the first bottom pixel
mov edx, edi ;the first top pixel
mov eax, edi
add eax, esi
mov ecx, [ebp+12]
;register responsible for calc left columns
loop0:
push esi
mov esi, [ebp+12]
loop1:
mov bl, [edi] ;changing pixels
xchg bl, [eax]
mov [edi], bl
add edi, esi ;next pixel in this column
sub eax, esi
cmp edi, eax
jl loop1
inc edx ;next bottom pixel
mov edi, edx
mov eax, edi ;next top pixel
pop esi
add eax, esi
dec ecx ;decrement number of columns left
jnz loop0 ;was that the last column?
end:
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
助けていただければ幸いです。事前に 感謝:)
psの私は、このバージョンを行うことができるようになります場合は、私は、この点で任意のヒントも参考になります、また、x86-64のバージョンのために全体のコードを変換する必要があります。..
コードが水平にではなく垂直にイメージを反転しているように見えます。何か不足していますか? – interjay
これは垂直反転ではない水平反転のためのものです:) – DinMan