如果不是处理的灰度图像,那么最大值也就没什么意思了。
彩色图也可以转成灰度图嘛。
虽然用了汇编,不过没有使用多媒体指令。
灰度图像的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; }