C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了“无符号模256”在图像解码的上下文中意味着什么大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
因为我是受虐狂我正试图在C中写一些东西来解码一个8位的PNG文件(这是一个学习的东西,我不是要重新发明libpng ……)

我已经到了这一点,当我放气的,未经过滤的数据缓冲区中的东西明显地类似于源图像(见下文),但它仍然非常,错误,而且我很确定我的实现方式有些歪斜filtering algorithms.他们中的大多数都很简单,但是在docs中有一件我不理解的重要事情,就是不擅长数学或者没有参加过comp-sci课程:

那是什么意思?

如果有人能告诉我,我会非常感激!

作为参,(我为蹩脚的C道歉)我在docs中描述的过滤算法的点头实现如下:

unsigned char paeth_preDictor (unsigned char a,unsigned char b,unsigned char C) {
    // a = left,b = above,c = upper left
    char p = a + b - c; //  initial estimate
    char pa = abs(p - a);    //  distances to a,b,c
    char pb = abs(p - b);
    char pc = abs(p - c);
    // return nearest of a,c,// breaking ties in order a,c.
    if (pa <= pb && pa <= pC) return a;
    else if (pb <= pC) return b;
    else return c;
}

void unfilter_sub(char* out,char* in,int bpp,int row,int rowlen) {
    for (int i = 0; i < rowlen; i++)
        out[i] = in[i] + (i < bpp ? 0 : out[i-bpp]);
}

void unfilter_up(char* out,int rowlen) {
    for (int i = 0; i < rowlen; i++)
        out[i] = in[i] + (row == 0 ? 0 : out[i-rowlen]);
}

void unfilter_paeth(char* out,int rowlen) {
    char a,c;
    for (int i = 0; i < rowlen; i++) {
        a = i < bpp ? 0 : out[i - bpp];
        b = row < 1 ? 0 : out[i - rowlen];
        c = i < bpp ? 0 : (row == 0 ? 0 : out[i - rowlen - bpp]);
        out[i] = in[i] + paeth_preDictor(a,c);
    }
}

我看到的图像:

资源

Source http://img220.imageshack.us/img220/8111/testdn.png

产量

@L_674_8@

解决方法

这意味着,在算法中,无论何时执行算术运算,都以256为模执行,即如果结果大于256然后是 it “wraps” around.结果是所有值总是适合8位而不是溢出.

无符号类型已经通过授权以这种方式运行,并且如果使用unsigned char(并且系统上的一个字节是8位,它可能是),那么您的计算结果自然永远不会溢出超过8位.

大佬总结

以上是大佬教程为你收集整理的“无符号模256”在图像解码的上下文中意味着什么全部内容,希望文章能够帮你解决“无符号模256”在图像解码的上下文中意味着什么所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。