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

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

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

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

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

 

转载于:https://www.cnblogs.com/tiandsp/archive/2013/03/16/2963460.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值