2005年10月23日 星期日

[Java] Retrieve pixel values from image

用來抓單一個點的pixel value
int BufferedImage.getRGB(int x, int y)
用來抓一個區域的pixel value
int [] BufferedImage.getRGB(int startX, int startY, int w, int h,
int[] rgbArray, int offset, int scansize)

sample code:

import java.awt.image;
import javax.imageio;

BufferedImage source = ImageIO.read(inputfile);

int imageWidth = source.getWidth();
int imageHeight = source.getHeight();

int [][] pixelValue = new int[height][width];

for(int i = 0; i < pixelValue.length; i++) {
for(int j = 0; j < pixelValue[i].length; j++) {
pixelValue[i][j] = source.getRGB(j, i);
}
}

Note:
1. 使用BufferedImage.getRGB(int x, int y)讀進來的是pixel value,並不能
直接使用,還要透過下面補充的函數[1]才可以得到RGB value。

2. 影像中的座標值剛好與記憶體中Array存放的位置為transpose,需特別注意。

補充:
1. 將使用BufferedImage.getRGB(int x, int y)讀進來的pixel value轉成RGB值

private int[] getRGBFromPixel(int pixelvalue) {
int[] RGB = new int[4];

/* alpha value denotes the transparent level of pixel */
int alpha = (pixelvalue >> 24) & 0xff;
int red = (pixelvalue >> 16) & 0xff;
int green = (pixelvalue >> 8 ) & 0xff;
int blue = pixelvalue & 0xff;

RGB[0] = alpha;
RGB[1] = red;
RGB[2] = green;
RGB[3] = blue;

return RGB;
}

2. 將RGB value轉成BufferedImage中儲存的pixel value

private int returnToRGB(int R, int G, int B) {
int RGB = 0x00000000;

/* process alpha value */
int alpha = (0xff << 24);

/* process Red value */
int Red = (R & 0xff) << 16;

/* process Green value */
int Green = (G & 0xff) << 8;

/* process Blue value */
int Blue = (B & 0xff);

RGB = alpha | Red | Green | Blue;

return RGB;
}

可以用 void BufferedImage.setRGB(int x, int y, int RGB) 設定RGB值

2005年10月12日 星期三

[java] Convert Color Image To Gray Level Image


import java.awt.color.*;
import java.awt.image.*;
import java.imageio.*;
ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY);
ColorConvertOp op = new ColorConvertOp(cs, null);
try {
BufferedImage colorImage =
ImageIO.read(new File("C:\\MATLAB701\\work\\1100608946.jpg"));
BufferedImage grayImage = op.filter(colorImage, null);
JFrame grayjf = new JFrame();
grayjf.getContentPane().add(new JButton(new ImageIcon(grayImage)));
grayjf.setSize(colorImage.getWidth(), colorImage.getHeight());
grayjf.setVisible(true);
}catch(Exception e) {
System.out.println("Error on reading color image");
}