加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

“无符号模256”在图像解码的上下文中意味着什么

发布时间:2020-12-16 09:34:13 所属栏目:百科 来源:网络整理
导读:因为我是受虐狂我正试图在C中写一些东西来解码一个8位的PNG文件(这是一个学习的东西,我不是要重新发明libpng ……) 我已经到了这一点,当我放气的,未经过滤的数据缓冲区中的东西明显地类似于源图像(见下文),但它仍然非常,错误,而且我很确定我的实现方式有些歪
因为我是受虐狂我正试图在C中写一些东西来解码一个8位的PNG文件(这是一个学习的东西,我不是要重新发明libpng ……)

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

Unsigned arithmetic modulo 256 is used,so that both the inputs and outputs fit into bytes.

那是什么意思?

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

作为参考,(我为蹩脚的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

产量

Output http://img862.imageshack.us/img862/2963/helloworld.png

解决方法

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读