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 件のコメント:
コメントを投稿