#1 Wed 07 July 2010 14:46
- filth
- Juste Inscrit !
- Date d'inscription: 7 Jul 2010
- Messages: 1
API C GDAL : RGBA4_4_4_4 et transparence
Bonjour
Avec le code en bas du post, j'arrive à créer une image tiff encodé en RGBA 32 bits
Je rencontre quelques problèmes pour passer en RGBA4_4_4_4
J'arrive bien a avoir une image mais je n'ai plus de transparence
J'ai l'impression que sur mes 4 bandes il y en a 3 qui servent pour les couleurs RGB et la 4ème n'affiche
que du noir.
Je sais deja qu'il faut modifier l'options NBITS et la passer à 4
papszOptions = CSLAddString(papszOptions, "NBITS=4");
Il me semble aussi que les couleurs sont inversées c'est à dire que la bande1 ne correspond plus au rouge
mais ca c'est un autre probleme.
Je passe un octet et non pas 4bits par couleur est ce correct ? J'ai cru voir dans un autre post que GDal faisait en interne la conversion
Savez vous quels autres modifications sont à réaliser pour avoir la transparence ?
Code:
int SIZE = 512; int nXSize = SIZE; int nYSize = SIZE; const char *pszFormat = "GTiff"; GDALDriver *poDriver; char **papszMetadata; poDriver = GetGDALDriverManager()->GetDriverByName(pszFormat); GDALDataset *poDstDS; // Création du fichier destination const char* pszDstFilename = "D:\\Workspace\\GDalTest1.7\\ConvertImage\\Sortie\\Output.tiff"; char **papszOptions = NULL; papszOptions = CSLAddString(papszOptions, "NBITS=8"); papszOptions = CSLAddString(papszOptions, "COMPRESS=LZW"); poDstDS = poDriver->Create( pszDstFilename, SIZE, SIZE, 4, GDT_Byte, papszOptions ); // Ecriture GDALRasterBand *poBand1 = poDstDS->GetRasterBand(1); GDALRasterBand *poBand2 = poDstDS->GetRasterBand(2); GDALRasterBand *poBand3 = poDstDS->GetRasterBand(3); GDALRasterBand *poBand4 = poDstDS->GetRasterBand(4); int nSize = SIZE * SIZE; GByte *bandRed = new GByte[nSize]; GByte *bandGreen = new GByte[nSize]; GByte *bandBlue = new GByte[nSize]; GByte *bandAlpha = new GByte[nSize]; for(int i=0; i< nSize; i++) { bandRed[i] = 255; bandGreen[i] = 0; bandBlue[i] = 0; bandAlpha[i] = 0; //i % 256; } poBand1->RasterIO( GF_Write, 0, 0, nXSize, nYSize, bandRed, nXSize, nYSize, GDT_Byte, 0, 0 ); poBand2->RasterIO( GF_Write, 0, 0, nXSize, nYSize, bandGreen, nXSize, nYSize, GDT_Byte, 0, 0 ); poBand3->RasterIO( GF_Write, 0, 0, nXSize, nYSize, bandBlue, nXSize, nYSize, GDT_Byte, 0, 0 ); poBand4->RasterIO( GF_Write, 0, 0, nXSize, nYSize, bandAlpha, nXSize, nYSize, GDT_Byte, 0, 0 ); GDALClose( (GDALDatasetH) poDstDS ); delete bandRed; delete bandGreen; delete bandBlue; delete bandAlpha;
Merci d'avance pour votre aide.
Hors ligne