void apply_grayscale(uint8_t* dstImg, uint8_t* srcImg, int pixelCount)
{
uint16_t tmp1;
int counter;
__asm
{
mov ebx, srcImg
mov ecx, pixelCount
mov counter, 0
loop0:
mov tmp1, 0
mov ah, 77 // 0.298912 * 256
mov al, [ebx+0]
mul ah
mov tmp1, ax
mov ah, 150 // 0.586611 * 256
mov al, [ebx+1]
mul ah
add tmp1, ax
mov ah, 29 // 0.114478 * 256
mov al, [ebx+2]
mul ah
add tmp1, ax
shr tmp1, 8
mov ax, tmp1
push ebx
mov ebx, dstImg
add ebx, counter
mov [ebx+0], al
mov [ebx+1], al
mov [ebx+2], al
pop ebx
add counter, 3
add ebx, 3
sub ecx, 3
jnz loop0
}
}
もうちょい短くなるのかな?2014/08/24 18:31 追記
ちょっと短くなった
void apply_grayscale(uint8_t* dstImg, uint8_t* srcImg, int pixelCount)
{
int counter;
__asm
{
mov ebx, srcImg
mov ecx, pixelCount
mov counter, 0
loop0:
mov dx, 0
mov ax, 77 // 0.298912 * 256
mul [ebx+0]
mov dx, ax
mov ax, 150 // 0.586611 * 256
mul [ebx+1]
add dx, ax
mov ax, 29 // 0.114478 * 256
mul [ebx+2]
add dx, ax
shr dx, 8
push ebx
mov ebx, dstImg
add ebx, counter
mov [ebx+0], dl
mov [ebx+1], dl
mov [ebx+2], dl
pop ebx
add counter, 3
add ebx, 3
sub ecx, 3
jnz loop0
}
}
0 件のコメント:
コメントを投稿