文档章节

ppm图像格式

来来叔叔
 来来叔叔
发布于 2017/08/04 23:57
字数 403
阅读 14
收藏 0
 
ppm是一种简单的图像格式,仅包含格式、图像宽高、bit数等信息和图像数据。
图像数据的保存格式可以用ASCII码,也可用二进制,下面只说说一种ppm格式中比较简单的一种:24位彩色、二进制保存的图像。
文件头+rgb数据:
P6\n
width height\n
255\n
rgbrgb...
其中P6表示ppm的这种格式;\n表示换行符;width和height表示图像的宽高,用空格隔开;255表示每个颜色分量的最大值;rgb数据从上到下,从左到右排放。

读取ppm图像:
// read ppm image, rgb data store in *data
void read_ppm(char* filename, unsigned char** data, int* w, int* h)
{
char header[20];
FILE* pFile;

pFile = fopen(filename, "rb");
fgets(header, 20, pFile);// get "P6"
fgets(header, 20, pFile);// get "width height"
sscanf(header,"%d %d\n", w, h);

*data = (unsigned char*) malloc((*w)*(*h)*3);

// get "255"
fgets(header, 20, pFile);

// get rgb data
fread(*data, (*w)*(*h)*3, 1, pFile);

fclose(pFile);
}

写ppm图像文件:
// giving rgb data and image width and height, write a ppm image,
void write_ppm(char* filename, unsigned char* data, int w, int h)
{
FILE* pFile;
char header[20];

pFile = fopen(filename, "wb");

// write "P6"
fwrite("P6\n", 3, 1, pFile);

// write "width height"
sprintf(header, "%d %d\n", w, h);
fwrite(header, strlen(header), 1, pFile);

// writeh "255"
fwrite("255\n", 4, 1, pFile);

// write rgb data
fwrite(data, w*h*3, 1, pFile);

fclose(pFile);
}

//清理ppm数据
// free ppm rgb data
void free_ppmdata(unsigned char** data)
{
free(*data);
*data = NULL;
}

使用举例:
int main(int argc, char* argv[])
{
unsigned char* data;
int w, h;

read_ppm("C:\\test.ppm", &data, &w, &h);
printf("ppm size: %dx%d\n", w, h);

write_ppm("C:\\test2.ppm", data, dw, dh);

free_ppmdata(&data);

printf("main() finished......\n");
return 0;
}
可以验证test2.ppm跟test.ppm是完全一致的,可以用看图软件打开。

© 著作权归作者所有

共有 人打赏支持
来来叔叔
粉丝 0
博文 100
码字总数 55732
作品 0
广州
高级程序员
OpenCV支持的图像格式

OpenCV目前支持的图像格式包括: Windows位图文件 - BMP, DIB; JPEG文件 - JPEG, JPG, JPE; 便携式网络图片 - PNG; 便携式图像格式 - PBM,PGM,PPM; Sun rasters - SR,RAS; TIFF文件 ...

moki_oschina
2016/05/20
35
0
HGL Suite 0.5.17 发布,图像编译和解析器

HGL Suite 0.5.17 发布,此版本更新内容如下: 让 netpbm 图像输出插件编写 PPM 和 PAM 提升l编译器的性能 HGL 是一个用来开发图像的编译器和解释器,自带简单但强大的语言,可通过插件来配置...

oschina
2014/01/25
230
0
GraphicsMagick的命令概览

GraphicsMagick的命令概览 ---------------------------------------------------------------------------- [ convert | identify | mogrify | composite | montage | compare | display | ......

mycms2013
2015/12/04
231
0
Qt中插入图片并在label中显示

参考:http://blog.51cto.com/whylinux/1877629 参考Qt的帮助文档,可支持的类型,即可以直接读取并显示的格式有BMP、GIF、JPG、JPEG、PNG、TIFF、PBM、PGM、PPM、XBM、XPM。具体的步骤为:先...

zong596568821xp
01/13
0
0
学习FFmpeg API – 解码视频

ffmpeg是编解码的利器,用了很久,以前看过dranger 的教程,非常精彩,受益颇多,是学习ffmpeg api很好的材料。可惜的是其针对的ffmpeg版本已经比较老了,而ffmpeg的更新又很快,有些API已经...

霄霄月月
2012/05/08
0
32

没有更多内容

加载失败,请刷新页面

加载更多

Linux安装MySQL的两种方法

1. 运行平台:CentOS 6.3 x86_64,基本等同于RHEL 6.3 2. 安装方法: 安装MySQL主要有两种方法:一种是通过源码自行编译安装,这种适合高级用户定制MySQL的特性,这里不做说明;另一种是通过...

onedotdot
21分钟前
4
0
phpize源码安装php扩展

4、进入源码中的ext/pcntl目录 ~# cd php-5.3.29/ext/pcntl/ 5、运行 phpize 命令 ~# phpizeConfiguring for:PHP Api Version: 20090626Zend Module Api No: 20090626......

bengozhong
29分钟前
2
0
Git 常用技巧

# Git 常用技巧 ## 暖场 - Git 怎么读 ? - Git 的作者是谁 ? - 谁没有 Github 账号 ? - 谁没有在 Github 提交过 issues,PR ? - 谁没有不会用命令操作 Git ? ## Git 简介 Git 是一种代码...

帝子兮
42分钟前
2
0
MySQL学习笔记

踩坑建议 对于时间相关字段,为插入及显示毫秒数据,建议使用datetime(6)类型,并设置数据库客户端显示毫秒相关数据

OSC_fly
42分钟前
0
0
spring配置文件中xsd引用异常

异常: org.xml.sax.SAXParseException; lineNumber: 78; columnNumber: 69; schema_reference.4: 无法读取方案文档 'http://www.springframework.org/schema/tx/spring-tx-3.2.xsd', 原因为......

zaolonglei
45分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部