how to get byte[] from an image

V

vaneric

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.
thanks in advance
eric
 
S

softwarepearls_com

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();
}
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,902
Latest member
Elena68X5

Latest Threads

Top