说明:
利用GDAL库函数创建图像时,一般会用到GDALDriver类Create()函数,但是Create()函数不支持JPEG、PNG等格式,不过,CreateCopy()支持这些格式,所以根据已有的图像数据,不能直接创建jpg、png格式的图像,而要借助GDAL的MEM内存文件,来创建他们。
本文主要介绍:借助GDAL的MEM内存文件,创建jpg、png格式的图像(以jpg为例)。
【GDAL创建JPG格式图像】一、借助MEM内存创建:
int main()
{
GDALAllRegister();
GDALDataset *poSrcDS = (GDALDataset*)GDALOpen("C:\\Users\\hong\\Desktop\\lena.tif",GA_ReadOnly);
if(poSrcDS==NULL)
{
printf("打开图像失败!");
return 0;
} //获取图像的基本信息,并把数据读入缓冲区间
CString OutFilename("C:\\Users\\hong\\Desktop\\123.jpg");
int m_Width = poSrcDS->GetRasterXSize();
int m_Height = poSrcDS->GetRasterYSize();
unsigned char *buffer = new unsigned char[m_Width*m_Height];
//存储数据的缓冲区
GDALRasterBand *poSrcDSRasterBand = poSrcDS->GetRasterBand(1);
CPLErr err = poSrcDSRasterBand->RasterIO(GF_Read,0,0,m_Width,m_Height,buffer,m_Width,m_Height,GDT_Byte,0, 0);
if(err != CE_None)
{
printf("读取图像数据失败!");
return 0;
} /* 以下程序是生成JPG的过程,上面的程序只为获得创建过程中的一些参数,如:图像的高、宽及图像数据*/ //把数据保存到临时文件MEM
GDALDriver *pDriverMEM = GetGDALDriverManager()->GetDriverByName("MEM");
GDALDataset *pOutMEMDataset = pDriverMEM->Create("", m_Width,m_Height,1,GDT_Byte,NULL);
GDALRasterBand *pOutMEMRasterBand = pOutMEMDataset->GetRasterBand(1);
err = pOutMEMRasterBand->RasterIO(GF_Write,0,0,m_Width,m_Height,buffer,m_Width,m_Height,GDT_Byte,0, 0);
if(err != CE_None)
{
printf("写图像数据失败!");
return 0;
} //以创建复制的方式,生成jpg文件
GDALDriver *pDriverJPG = GetGDALDriverManager()->GetDriverByName("JPEG");
pDriverJPG->CreateCopy(OutFilename,pOutMEMDataset,TRUE,0,0,0);
//创建jpg文件 return 0;
}
注:用RasterIO时,注意图像文件的数据类型,根据需要更改。
二、利用C\C++ 函数创建: 除了利用MEM内存创建外,还可以借助C\C++的一些函数,先用GDALDriver类的Create()函数生成.tif文件,然后通过更改文件名,来实现把.tif格式转化为所需格式。
CString oldname = OutimgName;
OutimgName.Replace(".tif",".jpg");
//更改文件名后缀,改成.jpg格式
CString newname = OutimgName;
remove(newname);
//如果已有该jpg文件,则移除,以便产生新的,否则不能替换文件名
rename(oldname,newname);
//替换文件名
推荐阅读
- MFC|gdal 图像金字塔
- GDAL功能模块列表
- 深入解析GDAL库的RasterIO()函数
- GDAL关于圆形,多边形的创建以及如何判断点位是否与图形相交
- c++|gdal2.2.3关闭数据集失败的问题
- 初学者的领悟|百分比截断方法增加图像对比度的原理
- 初学者的领悟|c++实现使用GDAL实现大幅影像的快速读取
- GDAL|GDAL影像重采样
- gdal应用-gdalbuildvrt
- GDAL应用