2015-05-20 1 views
0

Я использую visual C++ gdal для чтения .gis-файла с моего рабочего стола, а затем вывод изображения этого файла (png/jpeg). Код принимает файл «input.gis», а затем создает «output.png». Вот мой рабочий код:Gdal: Увеличить размеры (разрешение) изображения, полученного после использования createcopy()

GDALDriver *poDriver; 
GDALDataset *poDataset; 
char **papszMetadata; 
double adfGeoTransform[6]; 
int nBlockXSize, nBlockYSize; 
int bGotMin, bGotMax; 
double adfMinMax[2]; 
GDALAllRegister(); 
poDataset = (GDALDataset *) GDALOpen("C:\\input.gis", GA_ReadOnly); 
if(poDataset == NULL) 
{ 
    MessageBox::Show("cannot open");  
} 
else 
{ 
    poDataset->GetGeoTransform(adfGeoTransform); 
    GDALRasterBand *poBand; 
    poBand = poDataset->GetRasterBand(1); 
    float *pafScanline; 
    int nXSize = poBand->GetXSize(); 

    poBand->GetBlockSize(&nBlockXSize, &nBlockYSize); 
    adfMinMax[0] = poBand->GetMinimum(&bGotMin); 
    adfMinMax[1] = poBand->GetMaximum(&bGotMax); 
    if(! (bGotMin && bGotMax)) 
     GDALComputeRasterMinMax((GDALRasterBandH)poBand, TRUE, adfMinMax); 
    poDriver = GetGDALDriverManager()->GetDriverByName("PNG"); 
    if(poDriver == NULL) 
     printf("Cannot create image"); 
    else 
    { 
     papszMetadata = poDriver->GetMetadata(); 
     if(CSLFetchBoolean(papszMetadata, GDAL_DCAP_CREATECOPY, FALSE)) 
     { 
      printf("Driver %s supports CreateCopy() method.\n", "png"); 
     } 
    } 
    GDALDataset *poDstDS; 
    poDstDS = poDriver->CreateCopy("C:\\output.png", poDataset, FALSE, NULL, NULL, NULL); 
    if(poDstDS != NULL) 
     GDALClose((GDALDatasetH) poDstDS); 
    GDALClose((GDALDatasetH) poDataset); 

}

Моя проблема, когда я использую createcopy() функция от GDAL размер выходного изображения всегда 99 X 99 (который я предполагаю, что это размер по умолчанию) , Как увеличить размер изображения для вывода (например, 512 x 512)?

ответ

0

Размеры вашего выходного набора данных output.png - 99 х 99, так как это также размеры вашего входного набора данных input.gis. Чтобы создать новый набор данных с различными размерами, вам необходимо использовать метод Create, как описано в GDAL tutorial.

Драйвер PNG, к сожалению, не поддерживает этот метод, который оставляет вас с двумя вариантами:

  1. Выберите другой формат вывода, который поддерживает метод Create.
  2. Используйте метод Create для создания набора данных в памяти, а затем использовать CreateCopy на него - в suggestested в this GIS.SE post
+0

Я написал этот код. Не могли бы вы проверить его? Теперь я получаю какой-то странный результат. Есть много разбросанных точек, которые не являются ожидаемым выходом. Вот мой код: https://www.dropbox.com/s/ed8zc1mso69i307/Code.txt?dl=0 –

+0

Я не могу комментировать ваш конкретный код, так как я не говорю на C++, только на общих принципах GDAL. – Kersten

+0

Не могли бы вы объяснить мне функцию Rasterio (GF_Read/GF_Write) в общих чертах? Мне трудно понять параметры в этом. Я тоже пробовал читать http://www.gdal.org/gdal_tutorial.html. Не могли бы вы рассказать? Заранее спасибо! –