经常在群里有人问,创建图像的时候为什么老是提示下面的信息。
CPLError: Driver GTiff does not support DCAP_CREATE creation optionWarning 6: Driver GTiff does not support DCAP_CREATE creation optionCPLError: Driver GTiff does not support DCAP_CREATECOPY creation optionWarning 6: Driver GTiff does not support DCAP_CREATECOPY creation optionCPLError: Driver GTiff does not support DCAP_VIRTUALIO creation optionWarning 6: Driver GTiff does not support DCAP_VIRTUALIO creation optionCPLError: Driver GTiff does not support DMD_CREATIONDATATYPES creation optionWarning 6: Driver GTiff does not support DMD_CREATIONDATATYPES creation optionCPLError: Driver GTiff does not support DMD_CREATIONOPTIONLIST creation optionWarning 6: Driver GTiff does not support DMD_CREATIONOPTIONLIST creation optionCPLError: Driver GTiff does not support DMD_EXTENSION creation optionWarning 6: Driver GTiff does not support DMD_EXTENSION creation optionCPLError: Driver GTiff does not support DMD_HELPTOPIC creation optionWarning 6: Driver GTiff does not support DMD_HELPTOPIC creation optionCPLError: Driver GTiff does not support DMD_LONGNAME creation optionWarning 6: Driver GTiff does not support DMD_LONGNAME creation optionCPLError: Driver GTiff does not support DMD_MIMETYPE creation optionWarning 6: Driver GTiff does not support DMD_MIMETYPE creation optionCPLError: Driver GTiff does not support DMD_SUBDATASETS creation optionWarning 6: Driver GTiff does not support DMD_SUBDATASETS creation option
测试的代码如下:
GDALAllRegister(); GDALDriver *poDriver = GetGDALDriverManager()->GetDriverByName("GTiff"); char **papszCreateOptions = poDriver->GetMetadata(); GDALDataset *poDS = poDriver->Create("D:\\test.tif", 512, 512, 3, GDT_Byte, papszCreateOptions); // do something GDALClose((GDALDatasetH)poDS);
上面的代码中有个错误就是papszCreateOptions这个参数的值设置错误,如果没有创建选项,就指定为NULL就可以了,为啥要获取Dirver的元数据呢???
注意上面的代码,Create函数或者CreateCopy函数中有个参数叫CreateOptions,这个参数的意思就是为了指定创建图像的一些特殊选项,比如Tiff图像的压缩方式,Jpeg图像的压缩率,ENVI的图像存储方式等等,每种驱动所对应的创建选项也不会相同,具体的都可以在gdal的官网中的格式说明中找到非常详细的介绍,每种驱动页面中只要是支持创建的格式一般都会有一个Cerete Options的章节,里面就是这种格式的创建选项以及使用设置的参数信息。
知道了这个参数的原因,就明白了为什么会出现上面的提示,主要原因就是你设置的创建选项是错误的,所以GDAL提示了出来。
这个问题群里面非常多的人问,我觉得应该是有人在网上将这种错误的写法贴出来了,所以我搜了下,下面的网址中的用法都是这个原因导致的。
(char **papszMetadata = poDriver->GetMetadata();)最后希望大家在网上搜索资料的时候学会判断哪些是对的,那些是错误的,不要一股脑的全部拿来用。