如果不是处理的灰度图像,那么最大值也就没什么意思了。
彩色图也可以转成灰度图嘛。
虽然用了汇编,不过没有使用多媒体指令。
灰度图像的RGB都一样,没必要使用mmx寄存器了,直接对单个字节处理就行了。
获得最小值和获得最大值原理一样,只需改一个指令,把ja改为jna就行了。
Pix asmGetMaxGrayPix(BitmapData *data)
{
//处理的是灰度图像,所以RGB值都一样
//这里不需要用mmx指令也可以
UINT Height=data->Height;
UINT Width=data->Width;
Pix* p=(Pix*)data->Scan0;
UINT n=Height*Width-1;
Pix Max; //获得的最大像素
__asm
{
push esi;
mov ecx,n;
mov esi,[p];
mov eax,[esi];
add esi,4;
lp:
mov ebx,[esi];
cmp al,bl; //比较al,bl,若al>bl,则al不变,否则,al=bl;
ja lp2; //al若大于bl,调到lp2; //若要最小值调用这个: jna lp2;
mov al,bl;
lp2:
add esi,4;
dec ecx;
jnz lp;
mov ah,al;
mov bx,ax;
shl eax,16;
mov ax,bx;
mov [Max],eax;
pop esi;
}
return Max;
}