c语言读取.ppm文件,孙其功陪你学之——C语言读取.ppm文件
C语言读取.ppm图像文件,读取的是每一个像素点的R、G、B的之0——255之间
在写读取程序时遇到好多问题,比如类型转换问题最是头疼,数据量特别大,开始读出的数据
可能有好大一部分为0,导致误认为读取错误,本人将读出的数据放在一个一维数组中,你也
可以把他们放在自己定义的三维数组中,分别存放一个像素点的RGB值,这样会更加形象,容易使用。
但功夫不负有心人,终于搞定,
在此分享
希望能给大家有所帮助,如果分析中有不恰当的地方,望批评指正
unsigned char matppm[640*480*3];
int nextline(char *line, FILE *fp)
{
char *p;
do {
p = fgets(line, HEADER_MAXLINE, fp);
} while ( p != NULL && *p == '#' );
if( p==NULL )
return -1;
return 0;
}
int read_header(FILE *fin, int *widthp, int *heightp, int *maxvalp, int *comp)
{
char line[HEADER_MAXLINE];
int cols,rows,maxval;
if(nextline(line, fin)!=0) return -10;
if(strncmp(line,"P5",2)==0)
*comp=1;
else if (strncmp(line,"P6",2)==0)
*comp=3;
else if (strncmp(line,"P7",2)==0)
*comp=4;
else
return -1;
if(strlen(line)>3)
{
if(sscanf(line+2,"%d %d %d",&cols,&rows,&maxval )!=3 )
return -1;
}
else
{
if(nextline(line, fin)!=0) return -10;
if(sscanf(line,"%d %d",&cols,&rows)!=2 )
return -1;
if(nextline(line, fin)!=0) return -10;
if(sscanf(line,"%d",&maxval)!=1)
return -1;
}
*widthp = cols;
*heightp = rows;
*maxvalp = maxval;
return 0;
}
void read_ppm_image(char * image_name , int * rows, int * cols)
{
FILE * fp;
int widthp;
int heightp;
int maxvalp;
int comp;
short max=0;
fp = fopen(image_name, "rb");
read_header(fp, &widthp, &heightp, &maxvalp,&comp);
*rows = heightp;
*cols = widthp;
fread(matppm,1,widthp * heightp*3,fp);
fclose(fp);
}
在main()函数中应用如下:
int rows=0,cols=0;
*matppm = (unsigned char )malloc(640*480*3);
read_ppm_image("rgb_1.ppm" , &rows, &cols);
c语言读取.ppm文件,孙其功陪你学之——C语言读取.ppm文件相关推荐
- 孙其功陪你学之——OJB文件介绍
OBJ文件: OBJ文件是Alias|Wavefront公司为它的一套基于工作站的3D建模和动画软件"Advanced Visualizer"开发的一种标准3D模型文件格式,很适合 ...
- 孙其功陪你学之——Spark MLlib之协同过滤
转自 程序员的自我修养 – SelfUp.cn 由于在学习 spark mllib 但是如此详细的资料真的很难找,在此分享.1,220次浏览 什么是协同过滤 协同过滤(Collaborative Fi ...
- 语言迭代发_从今天开始,每天学点R语言~
首先,在这里先跟大家说声对不起,技术团队最近一直在做课程开发,本着宁缺毋滥的原则,我们的微信文章一再搁置,在编辑部催了无数遍之后,终于可以把课程放出来给大家了. 为了增加课程的实用性,在前期课程的基础 ...
- 计算机不学c语言的专业,关于高职计算机类专业学生学不好C语言的思考
摘 要 本文针对目前高职计算机类学生学不好C语言的普遍状况,分析了其成因,并提出了解决该问题的一种设想. 关键词 高职 C语言 基础课 中图分类号:G434 文献标识码:A 作为高职中的传统专业,计算 ...
- 零基础学python还是c语言-学习汇编还是学习python,自己刚学完C语言,学习那个好呢?...
很难说哪种语言就非常优秀,主要还是看个人发展方向,汇编是机器语言,会偏底层一些,对了解计算机的运行原理等有很大帮助. python是高级语言,更适合接触应用场景一些. 个人建议,作为计算机专业的,有时 ...
- c++文件读取空格_程序员术与道:术—C语言对文件进行处理,文件处理的基本操作...
各种编程语言都实现了文件的基本操作,提供了对应的接口,本篇文章先为你介绍C语言对文件进行处理和文件处理的基本操作.主要从以下几个方面进行介绍: 读取文件 写入文件 重命名文件 读取目录 读取目录下的文 ...
- R语言导入数据文件(数据导入、加载、读取)、haven包的read_spss函数导入SPSS中的sav格式文件
R语言导入数据文件(数据导入.加载.读取).haven包的read_spss函数导入SPSS中的sav格式文件 目录
- r读取shape文件可视化_R语言读取空间数据以及ArcGIS中OLS工具回归结果可视化R语言版...
前面已经介绍过R语言读取excel的方法了,当然读取数据来说,个人还是推荐csv或txt存储(针对小数据量).大数据量的数据的话建议还是用数据库,此外也可以考虑data.table包读取,这个包也是个 ...
- js二维数组arr中表示读取第i行第j列的是:_c++ c语言 数组与字符串
c语法7 - 数组与字符串 概述 定义:把具有相同类型的若干变量按有序形式组织起来称为数组. C语言数组属于构造数据类型.一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型.因 ...
最新文章
- 画世界怎么用光影_【干货】详解光影的魅力及其绘画技巧,一起打造极致炫丽的光影世界吧!...
- android loadlibrary 更改libPath 路径,指定路径加载.so
- ABAP 7.4 新语法-内嵌生命和内表操作
- 《好未来编程题》倒置字符串
- 安装MySQL-python报错 error: command 'gcc' failed with exit status 1解决方法
- php发送数据到视图格式_PHP-FPM的相关知识的深度解释
- java实现时钟方法汇总
- webpack打开项目命令_webpack打包好的页面在项目中怎么运行?
- C语言--结构体与内存对齐准则简单理解
- fullcalendar 只保留周_用枝条扦插橡皮树太浪费,只需一个“叶片”,就能变成一棵橡皮树...
- callmode php_phper必须了解的php常识
- 计算机中文件的分类,如何有效对电脑文件夹进行分类?
- mysql的user表被清空_用delete命令来个不小心删除了user表
- plotm matlab,MATLAB画地图的工具:worldmap和m_map
- 使用scp传输文件 Host key verification failed.解决
- 12 个让项目经理比程序员更痛苦的问题
- keras 世上无难事只要肯放弃(2)
- 侠众道武功最佳练级方案_下层武功最佳练级方案(新区推荐)
- 【技法操作】UI界面设计,用PS设计运动页面教程
- mastercam 马扎克 mazake8800 卧式加工中心后处理器
热门文章
- 我要用近期业余时间看完这18本书
- 【Python】【Tkinter】png转ico小工具源码以及打包exe
- web测试之包含多个控件元素的注册页面,怎么进行快速测试?
- win10系统磁盘格式化 Win10系统如何解除安全模式
- 深度学习GPU环境安装教程:Ubuntu16.04+1080(Ti)显卡驱动+CUDA+cuDNN(已n次完美安装)
- 适配全面屏方法(无效)
- 用python绘制箱线图
- 【Matlab绘图进阶第7弹】Matlab绘制二维散点图
- STM32CUBEIDE(10)----ADC在DMA模式下扫描多个通道
- 如何完全去掉visio图中的阴影