You need to request needed bands and extent into the buffer using GDALRasterIO method (see http://www.gdal.org/classGDALRasterBand.html#a30786c81246455321e96d73047b8edf1). The usage example here: http://www.gdal.org/gdal_tutorial.html
char* pabBuff = (char *) CPLMalloc(nBufXSize * nBufYSize); band->RasterIO(GF_Read, nXOff, nYOff, nXSize, nYSize, pabBuff, nBufXSize, nBufYSize, GDT_Byte, nPixelSpace0, 0, 0NULL); for(int i = 0; i < nBufXSize; ++i) { for (j = 0; j < nBufYSize; ++j) { char pixel = pabBuff[i * nBufXSize + j]; } }