我正在尝试在Android平台上复制一些图像过滤软件。桌面版本适用于bmps但在png文件上崩溃。
当我来到xOr两张图片(每个对应像素的32位整数)时,我得到两个软件的非常不同的结果。
我确信我的代码没有错,因为它是一个如此简单的任务,但在这里它是;
const int aMask = 0xFF000000;
int xOrPixels(int p1, int p2) {
return (aMask | (p1 ^ p2) );
}
可以找到Java桌面软件使用的JAI库的定义here和状态;
The destination pixel values are defined by the pseudocode:
dst[x][y][b] = srcs[0][x][y][b] ^ srcs[1][x][y][b];
其中b是带(即R,G,B)。
有什么想法?我和AND和OR有类似的问题。
这是使用png在Android底部的两个源图像xOr'd的图像。与位图xOr'd相同的文件给我一个填充0xFFFFFFFF(白色)的位图,根本没有像素。我检查了Android ap的二进制值,它似乎对我来说....
GAV株系
注意当我说(相同的32位ARGB表示)我的意思是android允许你将png文件解码为这种格式。虽然这可能会给出一些错误(png是无损的吗?)但我在输出上会得到完全不同的颜色。
答案 0 :(得分:0)
png可能具有错误的gamma或颜色空间,并且它会在加载时进行转换,从而影响结果。某些版本的Photoshop有一个错误,他们用错误的伽玛保存了png。
答案 1 :(得分:0)
答案 2 :(得分:0)
我从你的截图中检查了几个值。
输入像素:
与相应的输出像素非常相似。
在我看来,你正在对两个密切相关的图像进行异或(在每个颜色通道中反转),因此,输出必须接近0xffffff。
如果你要拍摄两张不同的照片,也许你会得到更像你期望的东西。
问题是,为什么要对XOR像素值进行异或?