<div dir="ltr">This is how i do it. I hope it is what you want:)<br> GByte *myGdalScanData=(GByte *) CPLMalloc(theRasterViewport->drawableAreaXDim*theRasterViewport->drawableAreaYDim*4);<br> if (myGdalScanData == NULL) <br>
{<br> std::cout<<"scan data is null! ";<br> }<br> else<br> {<br> CPLErr myErr = GDALRasterIO( myGdalRedBand, GF_Read,<br> theRasterViewport->rectXOffset,<br>
theRasterViewport->rectYOffset,<br> theRasterViewport->clippedWidth,<br> theRasterViewport->clippedHeight,<br>
myGdalScanData+0,<br> theRasterViewport->drawableAreaXDim,<br> theRasterViewport->drawableAreaYDim,<br> GDT_Byte, 4,theRasterViewport->drawableAreaXDim *4 );<br>
myErr = GDALRasterIO( myGdalGreenBand, GF_Read,<br> theRasterViewport->rectXOffset,<br> theRasterViewport->rectYOffset,<br> theRasterViewport->clippedWidth,<br>
theRasterViewport->clippedHeight,<br> myGdalScanData+1,<br> theRasterViewport->drawableAreaXDim,<br> theRasterViewport->drawableAreaYDim,<br>
GDT_Byte, 4,theRasterViewport->drawableAreaXDim* 4 );<br> myErr = GDALRasterIO( myGdalBlueBand, GF_Read,<br> theRasterViewport->rectXOffset,<br>
theRasterViewport->rectYOffset,<br> theRasterViewport->clippedWidth,<br> theRasterViewport->clippedHeight,<br>
myGdalScanData+2,<br> theRasterViewport->drawableAreaXDim,<br> theRasterViewport->drawableAreaYDim,<br> GDT_Byte, 4,theRasterViewport->drawableAreaXDim * 4 );<br>
myErr = GDALRasterIO( myGdalBlueBand, GF_Read,<br>
theRasterViewport->rectXOffset,<br>
theRasterViewport->rectYOffset,<br>
theRasterViewport->clippedWidth,<br>
theRasterViewport->clippedHeight,<br>
myGdalScanData+3,<br>
theRasterViewport->drawableAreaXDim,<br>
theRasterViewport->drawableAreaYDim,<br>
GDT_Byte, 4,theRasterViewport->drawableAreaXDim * 4 );<br> if (myErr != CPLE_None)<br> {<br> std::cout<< "RaterIO error: " << CPLGetLastErrorMsg();<br>
}<br> }<br><br><div class="gmail_quote">2008/10/19 <span dir="ltr"><<a href="mailto:craig.miller@spatialminds.com">craig.miller@spatialminds.com</a>></span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div><div style="text-align: left;">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.<br><br>For example if I was loading an RGBA image I am hoping to be able to make 4 separate RasterIO calls. <br>
<br>Assuming a BGRA image looks like:<br><br>0 - blue byte<br>
8 - green byte<br>
16 - red byte<br>
24 - alpha byte<br>
32 - blue byte<br>
40 - green byte<br>
48 - red byte<br>
56 - alpha byte<br>
64 - ....<br><br>The first RasterIO call would read in the blue values and insert them at 0, 32, 64, etc making it look like:<br><br>0 - blue byte<br>
8 - <br>
16 - <br>
24 - <br>
32 - blue byte<br>
40 - <br>
48 - <br>
56 - <br>
64 - ....<br><br>The second RasterIO call would read the green values and insert them at 8, 40, etc making it look like:<br><br>0 - blue byte<br>
8 - green byte<br>
16 - <br>
24 - <br>
32 - blue byte<br>
40 - green byte<br>
48 - <br>
56 - <br>
64 - ....<br><br>Rinse and repeat for red and alpha.<br><br>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.<br>
<br>Thanks for the help.<br><br>Craig<br><br> <br></div></div>
<br>_______________________________________________<br>
gdal-dev mailing list<br>
<a href="mailto:gdal-dev@lists.osgeo.org">gdal-dev@lists.osgeo.org</a><br>
<a href="http://lists.osgeo.org/mailman/listinfo/gdal-dev" target="_blank">http://lists.osgeo.org/mailman/listinfo/gdal-dev</a><br></blockquote></div><br></div>