以灰度绘制会产生色彩偏移

时间:2017-02-28 15:50:27

标签: java image graphics2d

我正在研究高程地图层次结构,四叉树,为此,我需要将16位灰度图像形式的高程数据集处理成不同级别的不同图像。这大部分是下采样输入数据。

考虑尺寸为14401x10801的输入图块图像,该图像应该被绘制为图像512x512的一部分。

绘制调用看起来像这样:

Graphics2D g2d = (Graphics2D) dstImage.getGraphics();
...
BufferedImage clip = sourceImage.getSubimage(srcX, srcY, srcWidth, srcHeight);
g2d.drawImage(clip , dstX, dstY, dstWidth, dstHeight, null);

其中

srcX = srcY = 0
srcWidth = 14401
srcHeight = 10801
dstX = dstY = 0
dstWidth = 171
dstHeight = 128

正在填充的区域相对而言是正确的,这意味着峰值应该是它们应该的位置。问题是,价值并不完全符合您的预期。具体来说,dst中的像素0,0绝对是海拔零,但是在那里绘制了值64.

查看src图像的内容

sourceImage.getSubimage( 0, 0, 
                    (int)(srcWidth/(double)dstWidth), 
                    (int)(srcHeight/(double)dstHeight));

应该从src图像中产生更多或更少的值,这些值将进入dst中的像素0,0。这些都是零,所以我认为这个问题并没有在某个高峰期撼动价值。更令人困惑的是,所有应为零的像素都设置为64。

出于此处理的目的(因为java无法处理16位灰度中的负值),所有像素都会提升16384.将这些像素提升仅为1000会导致错误-229而不是64.值更改很简单“添加到所有输入“ - > “过程” - > “从所有输出中减去”。

我希望通过简单地完成对图像的所有工作来避免所有重新采样,剪切和效率问题,但到目前为止,似乎java做了一些模糊的颜色映射。

任何想法我可能做错了什么?

1 个答案:

答案 0 :(得分:1)

所以我稍微戳了一下代码,出于绝望而开始关闭不应该但可能产生影响的事情。罪魁祸首原来是

{
  "fieldname": [
    [
      "GetIndicatorsByAnalysisProcessIDServlet"
    ]
  ]
}

这个暗示并没有......提示......人们如何能够平均超过84次16384而不是16384,但嘿,我是谁来判断。

此提示的文档说明

  

RENDERING提示是提供高级别的一般提示   建议是否更多地偏向算法选择速度   评估权衡时的质量或质量。对于任何渲染或图像处理操作,都可以参考此提示,但决策通常会优先考虑其他更具体的提示。

也不是很有帮助。

我在java2d中使用渲染提示时已经遇到了一些沮丧,似乎确实存在一些问题。

相关问题