2
我在Java中處理RGB值的時間非常糟糕,這讓我開始嘗試使用這種小型實驗。在BufferedImage上獲取和設置RGB值
我想到了這一點:加載一張圖片,獲取它的rgb值並創建一個具有相同值的新圖片。不幸的是,這不起作用(圖像顯示不同,見圖片),按照以下代碼...有人可以看到有什麼問題嗎?
BufferedImage oriImage=ImageIO.read(new URL("http://upload.wikimedia.org/wikipedia/en/2/24/Lenna.png"));
int[] oriImageAsIntArray = new int[oriImage.getWidth()*oriImage.getHeight()];
oriImage.getRGB(0, 0, oriImage.getWidth(),oriImage.getHeight(), oriImageAsIntArray, 0, 1);
BufferedImage bfImage= new BufferedImage(oriImage.getWidth(),oriImage.getHeight(),
BufferedImage.TYPE_INT_ARGB);
bfImage.setRGB(0,0,bfImage.getWidth(),bfImage.getHeight(),oriImageAsIntArray, 0, 1);
它看起來像最後一個參數是圖像的寬度,以便該方法知道何時開始每個新行。 – Tharwen
嗯,不知道:寬度已經發送作爲第三個參數...和圖像寬度已經在構造函數中設置... – Vespas
這是掃描線的長度。 :-)在大多數情況下,這等於寬度,但也可以更大。對於某些顯示/圖像格式,將填充放置在每個掃描行的末尾是有意義的(例如,以確保每條新行以偶數開始,即下一個字/長字邊界)。這些填充像素不會使圖像更寬,但仍然是後備數據緩衝區/數組的一部分,這就是爲什麼您需要這個參數。只要你使用值> =圖像寬度,並在兩個地方使用相同的值,你應該是好的。說得通? :-) – haraldK