【发布时间】:2013-11-16 17:15:36
【问题描述】:
我有一个指定高度和宽度的图像要缩小 1/4。我这样做的方法是取 4 个像素(例如,(0,0),(1,0),(0,1),(1,1)),获取每个像素的 RGB 值,然后取平均值RGB 值并将其作为一个像素注入新图像(因此前面提到的这四个像素坐标将成为新图像的 (0,0))。
它工作,有点;我在结果中有一些颜色偏差。
左边是原图,右边是经过上述方法处理的。我这辈子都想不通为什么颜色很奇怪。
对于它的价值,我正在使用以下方法:
getPixel();
getColor();
setColor();
RGB 值分别通过getRed() 等获取。这些值以整数形式存储。
【问题讨论】:
-
如果您执行
r = r + 0.25*color.getRed()之类的操作而不是稍后进行平均,会发生什么情况?您可能会遇到整数溢出(即:总和如此之大以至于大于整数可以容纳的最大值,并且它溢出为负数或从零重新开始)或整数饱和(即:语言检测到您将发生整数溢出,因此任何进一步的添加只会产生相同的值)。这种方法效率稍低,因为您在每个循环中进行更多的划分,但它更安全。 -
r,g和b是如何声明的? -
不过,整数的范围应该远远超过 1024。不过,对于@Dogbert 的价值;我试过
r = r + 0.25*color.getRed()和绿色和蓝色等价物,我的输出是彩虹静态噪声的美妙画布。 -
这是什么 API? java.awt.Color 将使用 getRed/getBlue/getGreen 方法返回 0 - 255 范围内的 RGB 值。不会溢出。
标签: java image-processing colors