[gdal-dev] RE: Problem w\images with one raster band

AksakTimur timchab at yahoo.com
Fri Jan 13 06:16:21 EST 2012


Martin,

This code below seems to work well:

...
checking if the band is a paletted one
...

else if (bandPalette)
{
    // Paletted map
    int pixelSpace=1*numBytesPerPixel;
    int lineSpace=destWidth * pixelSpace;

    unsigned char *rawImageData;
    rawImageData = new unsigned char[destWidth * destHeight * pixelSpace];
    imageData = new unsigned char[destWidth * destHeight * 3/*RGBA*/];
    pixelFormat = GL_RGBA;
    internalFormat = GL_RGBA;

   
bandPalette->RasterIO(GF_Read,windowX,windowY,windowWidth,windowHeight,(void*)	
		(rawImageData),destWidth,destHeight,targetGDALType,pixelSpace,lineSpace);
                
    for (int i = 0; i < destWidth * destHeight; i++)
    {
        const GDALColorEntry *colorEntry =
bandPalette->GetColorTable()->GetColorEntry(rawImageData[i]);
        GDALPaletteInterp interp =
bandPalette->GetColorTable()->GetPaletteInterpretation();
        if (!colorEntry)
        {
			...
        }
        else
        {
            if (interp == GPI_RGB)
            {
                imageData[3*i+0] = colorEntry->c3;
                imageData[3*i+1] = colorEntry->c2;
                imageData[3*i+2] = colorEntry->c1;
                // imageData[3*i+3] = colorEntry->c4;			                            
            }
           
        }
    }
    delete [] rawImageData;
}
else
{
   
}		
void * ptr_dest = NULL;
void * ptr_src = NULL;
if (imageData)
{
        BITMAPINFOHEADER  bih;
	int size = sizeof(BITMAPINFOHEADER) ;
	memset(&bih, 0, size);

	bih.biSize = size;
	bih.biWidth = ((((int) destWidth * 8) + 31) & ~31) >> 3;
	bih.biHeight = destHeight * -1;
	bih.biPlanes = 1;
	bih.biBitCount = 24;
	bih.biCompression = BI_RGB;

	pdc = new CDC ;
	pdc->CreateCompatibleDC(NULL);
	hbmp = CreateDIBSection( pdc->GetSafeHdc(),(BITMAPINFO*)&bih,
							DIB_PAL_COLORS,//DIB_RGB_COLORS,
							&ptr_dest ,
							NULL,
							0);

	unsigned int dibwidth =  m_bih.biWidth;

	GByte* src = (GByte*) imageData;

	for (int row = 0; row < destHeight; row++)
	{
		ptr_dest = dest + row * dibwidth* 3;
		ptr_src = src + row * destWidth *3;
		memcpy(ptr_dest, ptr_src, destWidth* 3);
	}
}

Your code is similar, though i haven't checked the GetColorEntryAsRGB
function yet

Best Regards





--
View this message in context: http://osgeo-org.1803224.n2.nabble.com/gdal-dev-Problem-w-images-with-one-raster-band-tp7175398p7183703.html
Sent from the GDAL - Dev mailing list archive at Nabble.com.


More information about the gdal-dev mailing list