Mathematica 为True
提供Rasterize[Graphics[{RGBColor[0, 0, 0], Disk[]}]] ===
Rasterize[Graphics[{RGBColor[0, 0, 1/257], Disk[]}]]
以下代码时感到惊讶(在32位Windows XP上使用 Mathematica 8.0.1) :
{{1}}
Mathematica渲染和导出为不同颜色的RGB颜色值的最小差异是什么?它是机器依赖的吗?
答案 0 :(得分:4)
我认为这种行为取决于机器,但我不知道它究竟取决于操作系统。在我的机器上,仅当分母为True
时,它才会计算为511
。
n = 257;
While[(Rasterize[Graphics[{RGBColor[0, 0, 0], Disk[]}]] ===
Rasterize[Graphics[{RGBColor[0, 0, 1/n], Disk[]}]]) != True,
n++];
Print@n
Out[1]=511
n<511
p1 = ImageData@Rasterize[Graphics[{RGBColor[0, 0, 0], Disk[]}]];
p2 = ImageData@Rasterize[Graphics[{RGBColor[0, 0, 1/257], Disk[]}]];
ArrayPlot[p1 - p2]
这种差异在n=510
一直保持不变,等于1/255
。
Max[p2 - p1] === N[1/255]
Out[1]=True
答案 1 :(得分:3)
看起来Rasterize
将每个像素的R G B通道舍入到最接近的8位值(到最近的1/256
)。
image = Image[{{{0, 0, .2/256}, {0, 0, .7/256}, {0, 0, 1.2/256}, {0,
0, 1.7/256}}}, ImageSize -> 4]
ImageData@image
Rasterize@image
ImageData@Rasterize@image
所以最小差异,光栅化为不同颜色应该在0.000000000000000000000000000左右......
答案 2 :(得分:1)
这里的Guilty派对是Rasterize,它可以消除色彩的精确度。获取有关ImageType[]
的帮助,看看Mathematica实际上识别出其他位深度,但Rasterize []会破坏字节之外的任何内容。