首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mul255 -这是什么?

Mul255 -这是什么?
EN

Stack Overflow用户
提问于 2014-07-03 21:18:13
回答 2查看 91关注 0票数 0

几天前,我下载了SumatraPDF的源代码,并开始探索它。我发现库MuPDFс支持有趣的函数,但不理解它。

代码语言:javascript
复制
static inline int fz_mul255(int a, int b) {
    int x = a * b + 128;
    x += x >> 8;
    return x >> 8;
}

在其他一些来源中,我找到了mul255函数的另一个定义:

代码语言:javascript
复制
(a+1)*b >> 8

那是什么?帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-03 23:15:22

如果不是第二行(x += x >> 8),我就会确切地知道这个方法是做什么的。如果我们删除它,为了讨论的目的:

代码语言:javascript
复制
static inline int fz_mul255(int a, int b) {
    int x = a * b + 128;
    // x += x >> 8;
    return x >> 8;
}

该方法现在是a* b的倍数,a*b是不动点数,有8个小数位,舍入到最近的结果。具体来说,a * b是倍数,+ 128循环是最近的(请记住,这会被移出,所以只有当它导致进位到第7位之后的下一个最重要的位位置时才有效果),并且>> 8校正了点的位置(因为使用整数算术将两个不动点值与8个小数位相乘会产生一个固定点值和16个小数位)。

唯一的问题是“x += x >> 8”是为了什么,恐怕我现在知道了。实际上,它将结果乘以(1 + 1/256)。

票数 0
EN

Stack Overflow用户

发布于 2014-07-10 13:35:23

在图形中,我们通常使用缩放整数值(范围0到255)来表示在0.0到1.0范围内的颜色值。

mul255函数将两个这样的缩放整数相乘,使255 * 255 = 255。

在MuPDF中的实现是基于Jim的精确缩放方法,该方法来自Jim的“脏像素”一书。引用(a+1)*b >> 8的另一个实现是一个更快但不太准确的近似。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24563434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档