expected image data

What I want to do right now is load an image file, probably PNG, and rip the pixel/indice and colormodel out, and convert them if needed. But I’m not totally sure on what I may be getting sometimes…

Let’s say I load an image, could be gif/png/whatever the normal way using Toolkit, then use PixelGrabber to get the ColorModel and instanceof says getColorModel() is IndexColorModel, am I guaranteed getPixels() returns a simple array of bytes that are just the indices to the color map? i.e. array of 0-255 values.

Also, say it’s a DirectColorModel, I pretty much want the array of pixels and DirectColorModel to match ColorModel.getRGBDefault(), is there a way to check with certainty that things are as I need them or should I just convert it no matter what?

I pretty much want a class that maintains a memory image source, argb pixel or palettized indice array, an array of IndexColorModel’s to change out the palette if were using a palettized image, and of course, the image created with the MemoryImageSource. I need access the valid pixel or indice info, as well as the image to draw, so i can update it etc…

anyways, the question is, what’s the best way to ensure the data is loaded and conforms both ways? i.e. Palettized images have a byte array of indices 0-255 and otherwise a DefaultColorModel with int[] pixels 0xAARRGGBB.

meh. :confused: I hope that made sense to someone.

I know exactly what your asking - but I don’t know the answer either :stuck_out_tongue:

if some1 does - you’d be killing 2 birds with 1 stone if u told us :smiley:

For anyone who cares:

Right now I’m using PixelGrabber to take 1 pixel using the first constructor specifying not to force default RGB.

If the color model of that pixel is DirectColorModel you can create a new pixel grabber and pass it true so it rips any pixel data using default RGB. Specified by ColorModel.getRGBDefault(). so basically if your image is truecolor, you’ve just the ripped the pixels and made it conform, getPixels() will return your pixel array just how you want it.

If the color model is IndexColorModel, it seems like the Object returned from getPixels() is always of type byte[], one byte per indice. this may or may not be true, but I did a bunch of testing.

I hadn’t dealt with much byte stuff in the past (almost none) so this confused me at first cause I was thinking a byte could only hold values from 0-127. Which is true sorta, you can do byte b = (byte) 255 and the true value will be something like -1 i think, 0 to 127 and then -128 to -1, java does the conversion i guess. ;p So poop on me for not paying attention t my books a long time ago.

and thats that pretty much. Doesn’t seem complicated now but at the time I was a little confused. Hope this helps someone.