我試圖使用類型TYPE_3BYTE_BGR
的BufferedImage
的底層DataBufferByte
儘可能快地設置像素值。使用BufferedImage的DataBuffer設置像素
也許我不理解,但是當我做了以下...
byte[] imgBytes = ((DataBufferByte) img.getData().getDataBuffer()).getData();
...它好像我收到的byte [],而不是一個引用的副本。例如,如果我跑......
System.out.println(System.identityHashCode(imgBytes));
System.out.println(System.identityHashCode((DataBufferByte) img.getData().getDataBuffer()).getData());
...我得到兩個明顯不同對象的哈希值。如果我沒有弄錯,這表明我沒有得到底層字節[]的引用,而是一個副本。如果是這種情況,我該如何直接編輯0???
或者我只是設置錯誤的像素...當我在imgBytes中設置像素時,它似乎沒有對BufferedImage執行任何操作。一旦我得到的byte [],我設定每個像素值,像這樣:
imgBytes[intOffset] = byteBlue;
imgBytes[intOffset+1] = byteGreen;
imgBytes[intOffset+2] = byteRed;
對我來說,這一切似乎罰款。我可以用這種方式讀取像素,所以看起來我應該可以用相同的方式寫出它們!
爲了更快提供更好的幫助,請發佈[SSCCE](http://sscce.org/)。熱鏈接到一個小的(以字節爲單位)的圖像或在代碼中生成一個。 –