hi
i have a jpeg color image .i need to get the image data as a byte
array .Is there any easy way of doing this using jdk alone?I couldn't
figure out how to create an Image from a filename like say 'F:
\myimages\testimage.jpeg'.
if someone can help pls do.
A byte array or an int array? Java's natural pixel format is 32-bit
ARGB.. so you normally work with int[], not byte[].
Here's a routine I wrote to get the raw BYTE pixels of an 8BPP
BufferedImage. It's probably trivial to adapt it to return an int[]
for a normal 32-bit Image.
/
******************************************************************************************
* Get the low-level byte[] pixel data of a TYPE_BYTE_INDEXED
{@link BufferedImage}.
* <P>
* Implementation note: this routine is quick because it just digs
down the
* BufferedImage/Raster/DataBuffer APIs to get the underlying byte
[]. Compare this to
* {@link #extractPixelArray} that is much slower.
*
* @param bufferedImage an 8 bits-per-pixel {@link BufferedImage}
* @return an byte[] containing entire image of 8-bit pixels as
linear byte array
* @see #extractPixelArray
* @throws IllegalArgumentException if passed image isn't an 8BPP
image or if number of
* internal DataBuffer banks isn't 1.
*****************************************************************************************/
public static byte[] getBytePixelArrayFor(final BufferedImage
bufferedImage) {
final WritableRaster writableRaster = bufferedImage.getRaster
();
final DataBuffer dataBuffer = writableRaster.getDataBuffer();
final int pixelSize = DataBuffer.getDataTypeSize
(dataBuffer.getDataType());
if (pixelSize != 8) {
throw new IllegalArgumentException("Passed BufferedImage
not an 8bpp image (bpp=" + pixelSize + ")");
}
final DataBufferByte dataBufferByte = (DataBufferByte)
dataBuffer;
final int numBanks = dataBuffer.getNumBanks();
if (numBanks != 1) {
throw new IllegalArgumentException("Passed BufferedImage
has more than one bank (# banks=" + numBanks + ")");
}
return dataBufferByte.getData();
}