#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


