多媒体指令(灰度像素最大值)

如果不是处理的灰度图像,那么最大值也就没什么意思了。

彩色图也可以转成灰度图嘛。

虽然用了汇编,不过没有使用多媒体指令。

灰度图像的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;
}

 

posted @ 2013-03-16 16:04  Dsp Tian  阅读(719)  评论(0编辑  收藏  举报