分享一下過去的經驗
我們的開發環境是Java 1.5,不過重點是要內建ImageIO套件。
接著,第一個步驟是開檔:
public static BufferedImage loadJpegImage(String path, String filename) {
BufferedImage inBI = null;
File orgin;
orgin = new File(path + filename);
try {
inBI = ImageIO.read(orgin);
} catch (Exception e) {
logger.fatal("JPEG Image Load Fail" + e.toString());
}
return inBI;
}
利用以上的片段便可以取得一個jpg檔的BufferedImage
第二個動作是讀取影像資訊:
BufferedImage 可以利用
int rgb= BufferedImage.getRGB(int x, int y);
取得某個點的RGB值
接著可以將這個int 轉換為Color,利用
Color color=new Color(int rgb);
取得Color 之後便可以利用
Color.getGreen() ,Color.getRed ,Color.getBlue取得各色的成份。
註:
其實也可以利用位元操作直接從int rgb取得各色成份,只是用以上的方式會比較清楚。
轉換灰階:
由於大部分的影像處理都是以灰階影像作為基礎,所以在這邊加上灰階轉換的程式碼。
如果需要將一張BufferedImage轉換為灰階圖只要用以下的程式變可以取得。
public static int[][] bufferedImagetoGrayMatrix(BufferedImage BI) {
BufferedImage inBI = BI;
int height = inBI.getHeight();
int width = inBI.getWidth();
int[][] outarray = new int[height][width];
int c, green, red, blue;
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
c = inBI.getRGB(j, i);
red = (c >> 16) & 0xFF;
green = (c >> 8) & 0xFF;
blue = (c >> 0) & 0xFF;
outarray[i][j] = (int) (red * 0.3 + green * 0.6 + blue + 0.1);
}
}
return outarray;
}
這邊的轉換公式是用graylevel=0.3R+0.6G+0.1B 如果需要更精細的公式可以自行修改。
如果看懂這個程式,要將rgb color space轉換到其他空間應該都可以自行處理。
寫入檔案:
做完處理,最後應該要把檔案寫回去把,這時候使用以下的程式即可。
public static void saveJpegImage(BufferedImage image,String
filename) {
File orgin;
orgin = new File(filename);
try {
ImageIO.write(image, "JPG", orgin);
} catch (Exception e) {
logger.fatal("JPEG Image Save Fail" + e.toString());
}
}
以上片段希望有些幫助。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.229.34.77