摘要:
如果不是处理的灰度图像,那么最大值也就没什么意思了。彩色图也可以转成灰度图嘛。虽然用了汇编,不过没有使用多媒体指令。灰度图像的RGB都一样,没必要使用mmx寄存器了,直接对单个字节处理就行了。获得最小值和获得最大值原理一样,只需改一个指令,把ja改为jna就行了。Pix asmGetMaxGrayPix(BitmapData *data){ //处理的是灰度图像,所以RGB值都一样 //这里不需要用mmx指令也可以 UINT Height=data->Height; UINT Width=data->Width; Pix* p=(Pix*)data->Scan0;... 阅读全文
摘要:
权当练手了,效果不好,cpu没有提供pmulluw这样一个无符号字相乘指令。处理的效果和matlab明显不同,尤其是背景,我实在找不出问题在哪里,最可能就在寄存器符号上。灰度公式是:Gray = (R*76 + G*150 + B*30) >> 8有符号范围是[-32768-32767],无符号范围是[0-65536],前者显然不够存放255*150=38250的,所以就溢出了。提高了位宽模拟无符号相乘不行,减小运算精度也不行,开源节流都不行,让人很纠结。反正是初学,这指令还要多练才行。VOID asmARGB2Gray(BitmapData *data){ UINT Height 阅读全文