开发者

Java BufferedImage Grayscale Degradation

开发者 https://www.devze.com 2023-02-06 13:42 出处:网络
I\'m creating a simple program which accepts a gray scale image as an input and what I simply want to do is retrieve the color information of each pixel, store it in an array of objects I call PixelCl

I'm creating a simple program which accepts a gray scale image as an input and what I simply want to do is retrieve the color information of each pixel, store it in an array of objects I call PixelClass. The ultimate goal is simply to repaint the image to a new BufferedImage using the said acquired color information.

Code used to create the pixel array from a given image.

    public static PixelClass[][] getPixelArray(BufferedImage bi){
    int height = bi.getHeight();
    int width = bi.getWidth();
    PixelClass[][] pixelArray = new PixelClass[height][width];
    for(int i = 0 ; i < height ; i++){
        for(int j = 0 ; j < width ; j++){
            pixelArray [i] [j] = new PixelClass(bi.getRGB(j, i));
        }
    }
    return pixelArray;
}

Code used to attempt to repaint the said image, using the array of PixelClass objects

    public void paintToPanel(PixelClass [][] pc, int height, int width){
    BufferedImage nbi = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
    for ( int i = 0 ; i < height ; i++){
        for ( int j = 0 ; j < width ; j++){
            nbi.setRGB(j, i, pc[i][j].getRGBValue());
        }
    }
    JLabel containerLabel = new JLabel(new ImageIcon(nbi));
    containerLabel.setBounds(10,10,nbi.getHeight(), nbi.getWidth());
    this.add(containerLabel);
}

Links to original images

http://sphotos.ak.f开发者_Go百科bcdn.net/hphotos-ak-snc4/hs1364.snc4/163667_172099429501181_100001033756527_413302_3062182_n.jpg

As you can see there is significant degradation on the quality of the image. The resulting image appear to be faded.


I would suggest you use the MemoryImageSource class. Something like :

byte[] pixels = // your pixels
ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY); 
int bits[] = new int[] {8};

ColorModel cm = new ComponentColorModel(cs, bits, false, false, Transparency.OPAQUE, DataBuffer.TYPE_BYTE);

MemoryImageSource mis = new MemoryImageSource(width, height, cm, pixels, 0, width);

Image im = Toolkit.getDefaultToolkit().createImage(mis);
0

精彩评论

暂无评论...
验证码 换一张
取 消