int bands[4] = { 3, 2, 1, 4 };
GDALDataset::RasterIO(..., 4, bands, 32, 32 * xSize, 1);

but then you probably mixed bits with bytes so:

int bands[4] = { 3, 2, 1, 4 };
GDALDataset::RasterIO(..., 4, bands, 4, 4 * xSize, 1);

[EMAIL PROTECTED] wrote:
I have a BGRA buffer in memory, and a multi-band RGBA TIF image. Is it possible to use RasterIO to read in values from each band and neatly interleave them in my buffer.

For example if I was loading an RGBA image I am hoping to be able to make 4 separate RasterIO calls.
Assuming a BGRA image looks like:

0 - blue byte
8 - green byte
16 - red byte
24 - alpha byte
32 - blue byte
40 - green byte
48 - red byte
56 - alpha byte
64 - ....

The first RasterIO call would read in the blue values and insert them at 0, 32, 64, etc making it look like:

0 - blue byte
8 -
16 -
24 -
32 - blue byte
40 -
48 -
56 -
64 - ....

The second RasterIO call would read the green values and insert them at 8, 40, etc making it look like:

0 - blue byte
8 - green byte
16 -
24 -
32 - blue byte
40 - green byte
48 -
56 -
64 - ....

Rinse and repeat for red and alpha.

Is this possible, or is there a much much simpler way that I'm overlooking? I've been looking at the paramaters for RasterIO but can't seem to get it to work. I do understand that I can just read the values into a separate buffer and memcpy them over to my image buffer. I was trying to minimize the total number of times the same data has to be copied.

Thanks for the help.

Craig


------------------------------------------------------------------------

_______________________________________________
gdal-dev mailing list
gdal-dev@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/gdal-dev

_______________________________________________
gdal-dev mailing list
gdal-dev@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/gdal-dev

Reply via email to