Re: how to get byte[] from an image
- From: softwarepearls_com <info@xxxxxxxxxxxxxxxxxx>
- Date: Wed, 12 Nov 2008 11:36:01 -0800 (PST)
On Nov 12, 7:42 pm, vaneric <vaneric...@xxxxxxxxx> wrote:
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();
}
.
- References:
- how to get byte[] from an image
- From: vaneric
- how to get byte[] from an image
- Prev by Date: Re: why in class Boolean, hashcode() of "true" is 1231 and of "false" is 1237?
- Next by Date: Re: why in class Boolean, hashcode() of "true" is 1231 and of "false" is 1237?
- Previous by thread: how to get byte[] from an image
- Index(es):
Relevant Pages
|