2012-04-04 158 views
0

我想使用JAVA語言提取jpeg圖像的像素值,並且需要將其存儲在數組(bufferdArray)中以供進一步操作。那麼我如何從jpeg圖像格式中提取像素值?Java中的圖像處理

+0

那麼簡單,沒人回答?首先嚐試一些你自己的努力。嘗試使用Google搜索ImageIO,BufferedImade.getRgb()... – 2012-04-04 22:00:57

+0

[使用圖像教程](http://docs.oracle.com/javase/tutorial/2d/images/index.html) – Jeffrey 2012-04-04 22:01:23

+1

可能的重複[如何轉換Java圖像轉換爲JPEG數組字節?](http://stackoverflow.com/questions/2568150/how-to-convert-java-image-into-jpeg-array-of-bytes) – 2012-04-04 22:03:10

回答

0

獲得JPEG到Java可讀對象最簡單的方法如下:

BufferedImage image = ImageIO.read(new File("MyJPEG.jpg")); 

的BufferedImage提供了用於在圖像中在精確的像素位置獲得的RGB值(XY整數座標)的方法,所以它如果你想知道你想如何將它存儲在一維數組中,那麼你就可以決定了,但這是它的要點。

1

看看BufferedImage.getRGB()。

這是一個精簡的指導示例,介紹如何拆分圖像以對像素執行條件檢查/修改。根據需要添加錯誤/異常處理。

public static BufferedImage exampleForSO(BufferedImage image) { 
BufferedImage imageIn = image; 
BufferedImage imageOut = 
new BufferedImage(imageIn.getWidth(), imageIn.getHeight(), BufferedImage.TYPE_4BYTE_ABGR); 
int width = imageIn.getWidth(); 
int height = imageIn.getHeight(); 
int[] imageInPixels = imageIn.getRGB(0, 0, width, height, null, 0, width); 
int[] imageOutPixels = new int[imageInPixels.length]; 
for (int i = 0; i < imageInPixels.length; i++) { 
    int inR = (imageInPixels[i] & 0x00FF0000) >> 16; 
    int inG = (imageInPixels[i] & 0x0000FF00) >> 8; 
    int inB = (imageInPixels[i] & 0x000000FF) >> 0; 

    if ( conditionChecker_inRinGinB ){ 
     // modify 
    } else { 
     // don't modify 
    } 

} 
imageOut.setRGB(0, 0, width, height, imageOutPixels, 0, width); 
return imageOut; 
} 
0

有一種方法可以將緩衝圖像轉換爲整數數組,其中數組中的每個整數表示圖像中像素的rgb值。

int[] pixels = ((DataBufferInt)image.getRaster().grtDataBuffer()).getData(); 

有趣的是,當整數數組中的元素被編輯時,圖像中的相應像素也是如此。

爲了從一組x和y座標中找到數組中的像素,您可以使用此方法。

public void setPixel(int x, int y ,int rgb){ 
    pixels[y * image.getWidth() + x] = rgb; 
} 

即使有乘法和加法的座標,它仍比BufferedImage類使用setRGB()方法更快。

編輯: 也請記住,圖片需要的類型需要是TYPE_INT_RGB,而不是默認情況下。它可以通過創建相同尺寸的新圖像以及TYPE_INT_RGB類型進行轉換。然後使用新圖像的圖形對象將原始圖像繪製到新圖像上。

public BufferedImage toIntRGB(BufferedImage image){ 
    if(image.getType() == BufferedImage.TYPE_INT_RGB) 
     return image; 
    BufferedImage newImage = new BufferedImage(image.getWidth(), image.getHeight, BufferedImage.TYPE_INT_RGB); 
    newImage.getGraphics().drawImage(image, 0, 0, null); 
    return newImage; 
}