안녕하십니까, 저는 8bpp .BMP 이미지를 수평/반전시키기위한 코드를 개발했습니다. 4의 배수뿐만 아니라 모든 너비를 적절히 처리합니다. 이제는 1 bpp에 대해서도이 코드를 변환해야합니다. x86을 사용하는 bmp 이미지 (회색조). 어려운 부분은 개인 비트를 초과 할 수있는 방법을 모른다는 것입니다.x86에서 수평으로 "1bpp .bmp image"를 뒤집기 위해 코드를 "8bpp .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
도움이 되겠습니다. 사전 :
난 다음이 버전을 나는 또한,이 점에서 어떤 힌트도 도움이 될 것입니다 - 64 버전에 대한 전체 코드를 변환해야 할 수있을 것입니다 경우PS ..
코드가 가로로가 아니라 이미지를 세로로 넘기는 것처럼 보입니다. 내가 놓친 게 있니? – interjay
이것은 수평이 아닌 수직으로 뒤집기위한 것입니다. – DinMan