GDAL创建JPG或PNG格式图像
1. 概述
根据GDAL文档,JPG/PNG格式支持读取和批量写入,但不支持实时更新。也就是不支持Create()方法,但是支持CreateCopy()方法。也可能是由于JPG/PNG格式是轻量化的压缩格式决定的。
2. 实现
具体的实例如下:
#include <iostream>
#include <gdal_priv.h>
using namespace std;
int main()
{
GDALAllRegister(); //GDAL所有操作都需要先注册格式
CPLSetConfigOption("GDAL_FILENAME_IS_UTF8", "NO"); //支持中文路径
//图像参数
string tilePath = "D:/1.png";
//string tilePath = "D:/1.jpg";
int tileSizeX = 256;
int tileSizeY = 256;
int dstBand = 3;
int dstDepth = 1;
//分配缓冲区
size_t tileBufSize = (size_t)tileSizeX * tileSizeY * dstBand;
GByte *tileBuf = new GByte[tileBufSize];
memset(tileBuf, 0, tileBufSize * sizeof(GByte));
//绘制一个斜线
for (int yi = 0; yi < tileSizeY; yi++)
{
for (int xi = 0; xi < tileSizeX; xi++)
{
if (xi != yi)
{
continue;
}
size_t m = (size_t)tileSizeX * dstBand * yi + dstBand * xi;
for (int bi = 0; bi < dstBand; bi++)
{
tileBuf[m + bi] = 255;
}
}
}
//把数据保存到临时文件MEM
GDALDriver *pDriverMEM = GetGDALDriverManager()->GetDriverByName("MEM");
GDALDataset *pOutMEMDataset = pDriverMEM->Create("", tileSizeX, tileSizeY, dstBand, GDT_Byte, NULL);
if (!pOutMEMDataset)
{
printf("Can't Write Image!");
return false;
}
pOutMEMDataset->RasterIO(GF_Write, 0, 0, tileSizeX, tileSizeY, tileBuf, tileSizeX, tileSizeY,
GDT_Byte, dstBand, nullptr, dstBand*dstDepth, tileSizeX*dstBand*dstDepth, dstDepth);
//以创建复制的方式,生成png文件
GDALDriver *pDriverPNG = GetGDALDriverManager()->GetDriverByName("PNG");
//GDALDriver *pDriverPNG = GetGDALDriverManager()->GetDriverByName("JPEG");
GDALDataset* tile = pDriverPNG->CreateCopy(tilePath.c_str(), pOutMEMDataset, TRUE, 0, 0, 0);
if (!tile)
{
printf("Can't Write Image!");
return false;
}
GDALClose(pOutMEMDataset);
pOutMEMDataset = nullptr;
GDALClose(tile);
tile = nullptr;
if (tileBuf)
{
delete[] tileBuf;
tileBuf = nullptr;
}
}
这里创建了一个画着对角线的JPG/PNG图像:

GDAL创建JPG或PNG格式图像的更多相关文章
- 在VC下显示JPEG、GIF格式图像的一种简便方法
在VC下显示JPEG.GIF格式图像的一种简便方法 一. 引言 JPEG图像压缩标准随然是一种有损图像压缩标准,但由于人眼视觉的不敏感,经压缩后的画质基本没有发生变化,很快便以较高的压缩率得到了广泛 ...
- ENVI显示GDAL创建GeoTiff文件的一个问题及其思考
作者:朱金灿 来源:http://blog.csdn.net/clever101 使用gdal创建一个100*100的红色的geotiff图像,代码如下: #include <assert.h& ...
- MySQL创建数据库[保存mojo格式的数据库]已经常用的utf8格式数据库
一.创建最新编码utf8mb4格式的库: CREATE DATABASE IF NOT EXISTS yourdbname CHARACTER SET utf8mb4 COLLATE utf8mb4_ ...
- bmp格式图像的读写函数(对一个开源代码的封装)
在网上看到一段读写bmp格式图像的代码,本文对这段代码分成两个函数封装起来方便使用,一个函数是读取bmp格式的图像,一个是向指定文件写入bmp格式的图像. 前提 我们不需要知道这段代码是如何读取bmp ...
- GDAL创建图像提示Driver xxx does not support XXX creation option的原因
经常在群里有人问,创建图像的时候为什么老是提示下面的信息. CPLError: Driver GTiff does not support DCAP_CREATE creation option Wa ...
- 利用GDAL从内存中直接解析图像数据
对于网络数据源,调度中可以把数据写入本地,然后读取本地数据格式进行影像的解析(地形有时候也用tif等格式). 此种方式会每次调度进行不必要的IO开销和时间花费. GDAL提供了相应的接口,直接从内存中 ...
- HTML与CSS入门——第十章 创建用于Web上的图像
知识点: 1.选择图像软件的方法 2.准备用于网上的照片的方法 3.创建标题和按钮的方法 4.减少图像中颜色数量的方法 5.创建透明图像的方法 6.创建平铺背景的方法 7.创建Web动画的方法 10. ...
- 使用GDAL将下载的Google卫星图像转为带坐标的tif
网上有很多下载Google地图的卫片的软件,一般下载下来的图像都是jpg格式的,另外附带一个坐标信息的描述文件.这样的数据不能直接拿来在遥感或者GIS软件中使用,因为图像里面没有投影和坐标信息,所以就 ...
- 【视频开发】非常优秀的CxImage各种格式图像开源工具
下面介绍应用它进行图像类型转换的方式: 1.从一种图像文件类型转换为另一种文件类型(convert from a format to another) CxImage image; // ...
- 在C#中使用GDAL创建Shape文件
这几天在项目中考虑使用GDAL,由于10年没有用过VC了,就在网上搜了下怎么样在C# 中使用GDAL,看到了http://blog.csdn.net/liminlu0314/article/detai ...
随机推荐
- Pandas 读取 Excel 斜着读
读取 Excel 斜着读数据 import pandas as pd def read_sideling(direction, sheet_name, row_start, col_start, ga ...
- 【BUU刷题日记】——第一周
[BUU刷题日记]--第一周 一.[极客大挑战 2019]PHP1 题目说自己有一个备份网站的习惯,所以要了解一下常见的网站源码备份格式及文件名: 格式:tar.tar.gz.zip.rar 文件名: ...
- 快速展示原型之Minimal API开发
Minimal API官网地址: https://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/minimal-apis/security?vi ...
- LINUX基础知识和命令 二
LINUX alias (别名) 自定义命令=原始命令 原始命令中有特殊符@#%()请打上 引号,单双无所谓 例:vim /etc/sysconfig/network-scripts/ifcfg-en ...
- 使用Postman快速复现浏览器的请求(包括生成调用代码)
前言 大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教. 好久没有写开发类的工具使用文了,这次我来讲下 ...
- JavsScript对密码进行Base64加密和Base64解密
const password = "hello"; // 进行Base64加密 let pwd64 = window.btoa(password); console.log(pwd ...
- java4.switch条件语句、循环结构
switch条件语句.循环结构 循环结构 while 1.先判断再执行代码 2.代码块至少执行0次 do-while- 1.先执行代码再执行判断 2.代码块至少执行1次 for 1.用于编写已知循环次 ...
- [Python急救站课程]Python集成环境IDEA:Pycham专业版2023.2.3安装与破解方法
今天给大家带来了我们的第一课内容,Pycharm专业版2023.2.3安装并破解 首先,在浏览器中搜索Pycharm即可进入官网下载:https://www.jetbrains.com/pycharm ...
- 完蛋!我被 Out of Memory 包围了!
是极致魅惑.洒脱自由的Java heap space? 是知性柔情.温婉大气的GC overhead limit exceeded? 是纯真无邪.活泼可爱的Metaspace? 如果以上不是你的菜,那 ...
- 五分钟 k8s 实战-应用探针
今天进入 kubernetes 的运维部分(并不是运维 kubernetes,而是运维应用),其实日常我们大部分使用 kubernetes 的功能就是以往运维的工作,现在云原生将运维和研发关系变得更紧 ...