Java / Swing无法从图像中获取RGB

时间:2014-10-19 14:50:51

标签: java swing

我在其他任何地方都没有看到这个问题,所以我来这里寻求帮助。我正在制作一个简单的程序来改变黑白图像的对比度并完成几乎所有工作。但是我有一个使用getRGB方法的issu。对于图像的前半部分(粗略地),它返回150,150,150或图像所具有的正常值。然后由于一个我无法解释的原因,它返回0,0,0一段时间然后255,255,255与几个0混合在一起。有人知道为什么会这样吗?

private void getRGB(BufferedImage image, int x, int y){
        //get pixel rgb from image
        int temp=image.getRGB(x,y);
        //set the value to color and then get each component
        Color color=new Color(temp);
        rgb[0]=color.getRed();
        rgb[1]=color.getGreen();
        rgb[2]=color.getBlue();
        //debug file
        data.println(color.getRed()+"\t"+color.getGreen()+"\t"+color.getBlue());       
    }

这是文件data.txt的片段。有比我在这里显示的更多的零。

189 189 189
184 184 184
178 178 178
181 181 181
171 172 171
196 196 195
182 182 182
175 175 175
186 186 186
181 181 181
192 192 191
183 183 183
184 184 184
186 186 186
188 188 188
183 183 183
0   0   0
0   0   0
0   0   0
0   0   0
0   0   0
0   0   0
0   0   0
0   0   0
0   0   0
0   0   0
0   0   0
0   0   0
255 255 255
255 255 255
255 255 255
255 255 255
255 255 255
255 255 255
255 255 255

这是我计算每个像素的新灰度级的函数。据我所知,这是正常运作。

    private void equalize(int x, int y, int max, int min){

            //This calls getRGB then calculates the old and new grey levels for a pixel
            //It then will assign the new grey level to the pixel
            getRGB(image1, x, y);
            int oldGrey = ((rgb[0]+rgb[1]+rgb[2])/3);
            int newGrey = (int)Math.round(
                    (((cdf[oldGrey]*1.0)-minCdfValue)/
                        ((x*y)-minCdfValue))*
                            (newMax-newMin)+newMin);

            if(oldGrey != 0){
                for(int i=0; i<3; i++){

                    rgb[i] *= ((newGrey*1.0)/(oldGrey*1.0));
                }
            }else{
                rgb[0]=rgb[1]=rgb[2]=newGrey;
            }
            setRGB(image1, x, y);

        }

如果我遗漏了任何信息,请告诉我。

编辑: CDF是累积分布函数,是用于直方图均衡的方法。我相信维基百科上有一篇关于它的文章。至于使用RGB,这只是一个要求。每个的值都是相同的。 对于0和255,是的,它们是合法的参数,但是,我编辑了图像,使得它的直方图非常窄,值大约为80到210.没有真正的黑色(0)或真白色(255)像素全部在图像中。

0 个答案:

没有答案