Как создать RGB-изображение с помощью GDAL C ++? - PullRequest
1 голос
/ 17 апреля 2020

Я работаю с GDAL с использованием C ++.

У меня есть код для создания черно-белого изображения:

GDALAllRegister();
GDALDriver *pDriverTiff = GetGDALDriverManager()->GetDriverByName("GTiff");
GDALDataset *pNewDS;
pNewDS = pDriverTiff->Create(output, nCols, nRows, 1, GDT_UInt16, NULL);
double *transform = geotiff->get_transform();
pNewDS->SetProjection(geotiff->get_proj().c_str());
pNewDS->SetGeoTransform(geotiff->get_transform());
float *newRow = (float *) CPLMalloc(sizeof(float)*nCols);
for (int i = 0; i < nRows; i++){
    for (int j = 0; j < nCols; j++){
        newRow[j] = matrix[i * nCols + j];
    }
    pNewDS->GetRasterBand(1)->RasterIO(GF_Write, 0, i, nCols, 1, newRow, nCols, 1, GDT_Float32, 0, 0);
}
GDALClose(pNewDS);
GDALDestroyDriverManager();

И он работает безупречно.

Но теперь я хочу создать цветное изображение RGB. Я пытаюсь сделать это так:

GDALAllRegister();
GDALDriver *pDriverTiff = GetGDALDriverManager()->GetDriverByName("GTiff");
GDALDataset *pNewDS;
char* options[] = {"PHOTOMETRIC=RGB", "PROFILE=GeoTIFF"};
pNewDS = pDriverTiff->Create(output, nCols, nRows, 3, GDT_UInt16, options);
double *transform = geotiff->get_transform();
pNewDS->SetProjection(geotiff->get_proj().c_str());
pNewDS->SetGeoTransform(geotiff->get_transform());
float *newRow = (float *) CPLMalloc(sizeof(float)*nCols);
for (int i = 0; i < nRows; i++){
    for (int j = 0; j < nCols; j++){
        newRow[j] = matrix[i * nCols + j];
    }
    pNewDS->GetRasterBand(1)->RasterIO(GF_Write, 0, i, nCols, 1, newRow, nCols, 1, GDT_Float32, 0, 0);
}
for (int i = 0; i < nRows; i++){
    for (int j = 0; j < nCols; j++){
        newRow[j] = matrix[i * nCols + j];
    }
    pNewDS->GetRasterBand(2)->RasterIO(GF_Write, 0, i, nCols, 1, newRow, nCols, 1, GDT_Float32, 0, 0);
}
for (int i = 0; i < nRows; i++){
    for (int j = 0; j < nCols; j++){
        newRow[j] = matrix[i * nCols + j];
    }
    pNewDS->GetRasterBand(3)->RasterIO(GF_Write, 0, i, nCols, 1, newRow, nCols, 1, GDT_Float32, 0, 0);
}
pNewDS->GetRasterBand(1)->SetColorInterpretation(GCI_RedBand);
pNewDS->GetRasterBand(2)->SetColorInterpretation(GCI_GreenBand);
pNewDS->GetRasterBand(3)->SetColorInterpretation(GCI_BlueBand);
GDALClose(pNewDS);
GDALDestroyDriverManager();

Но изображение по-прежнему черно-белое. Как сделать его цветным?

...