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文件相关推荐

  1. 孙其功陪你学之——OJB文件介绍

    OBJ文件: OBJ文件是Alias|Wavefront公司为它的一套基于工作站的3D建模和动画软件"Advanced Visualizer"开发的一种标准3D模型文件格式,很适合 ...

  2. 孙其功陪你学之——Spark MLlib之协同过滤

    转自 程序员的自我修养 – SelfUp.cn 由于在学习 spark mllib 但是如此详细的资料真的很难找,在此分享.1,220次浏览 什么是协同过滤 协同过滤(Collaborative Fi ...

  3. 语言迭代发_从今天开始,每天学点R语言~

    首先,在这里先跟大家说声对不起,技术团队最近一直在做课程开发,本着宁缺毋滥的原则,我们的微信文章一再搁置,在编辑部催了无数遍之后,终于可以把课程放出来给大家了. 为了增加课程的实用性,在前期课程的基础 ...

  4. 计算机不学c语言的专业,关于高职计算机类专业学生学不好C语言的思考

    摘 要 本文针对目前高职计算机类学生学不好C语言的普遍状况,分析了其成因,并提出了解决该问题的一种设想. 关键词 高职 C语言 基础课 中图分类号:G434 文献标识码:A 作为高职中的传统专业,计算 ...

  5. 零基础学python还是c语言-学习汇编还是学习python,自己刚学完C语言,学习那个好呢?...

    很难说哪种语言就非常优秀,主要还是看个人发展方向,汇编是机器语言,会偏底层一些,对了解计算机的运行原理等有很大帮助. python是高级语言,更适合接触应用场景一些. 个人建议,作为计算机专业的,有时 ...

  6. c++文件读取空格_程序员术与道:术—C语言对文件进行处理,文件处理的基本操作...

    各种编程语言都实现了文件的基本操作,提供了对应的接口,本篇文章先为你介绍C语言对文件进行处理和文件处理的基本操作.主要从以下几个方面进行介绍: 读取文件 写入文件 重命名文件 读取目录 读取目录下的文 ...

  7. R语言导入数据文件(数据导入、加载、读取)、haven包的read_spss函数导入SPSS中的sav格式文件

    R语言导入数据文件(数据导入.加载.读取).haven包的read_spss函数导入SPSS中的sav格式文件 目录

  8. r读取shape文件可视化_R语言读取空间数据以及ArcGIS中OLS工具回归结果可视化R语言版...

    前面已经介绍过R语言读取excel的方法了,当然读取数据来说,个人还是推荐csv或txt存储(针对小数据量).大数据量的数据的话建议还是用数据库,此外也可以考虑data.table包读取,这个包也是个 ...

  9. js二维数组arr中表示读取第i行第j列的是:_c++ c语言 数组与字符串

    c语法7 - 数组与字符串 概述 定义:把具有相同类型的若干变量按有序形式组织起来称为数组. C语言数组属于构造数据类型.一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型.因 ...

最新文章

  1. 画世界怎么用光影_【干货】详解光影的魅力及其绘画技巧,一起打造极致炫丽的光影世界吧!...
  2. android loadlibrary 更改libPath 路径,指定路径加载.so
  3. ABAP 7.4 新语法-内嵌生命和内表操作
  4. 《好未来编程题》倒置字符串
  5. 安装MySQL-python报错 error: command 'gcc' failed with exit status 1解决方法
  6. php发送数据到视图格式_PHP-FPM的相关知识的深度解释
  7. java实现时钟方法汇总
  8. webpack打开项目命令_webpack打包好的页面在项目中怎么运行?
  9. C语言--结构体与内存对齐准则简单理解
  10. fullcalendar 只保留周_用枝条扦插橡皮树太浪费,只需一个“叶片”,就能变成一棵橡皮树...
  11. callmode php_phper必须了解的php常识
  12. 计算机中文件的分类,如何有效对电脑文件夹进行分类?
  13. mysql的user表被清空_用delete命令来个不小心删除了user表
  14. plotm matlab,MATLAB画地图的工具:worldmap和m_map
  15. 使用scp传输文件 Host key verification failed.解决
  16. 12 个让项目经理比程序员更痛苦的问题
  17. keras 世上无难事只要肯放弃(2)
  18. 侠众道武功最佳练级方案_下层武功最佳练级方案(新区推荐)
  19. 【技法操作】UI界面设计,用PS设计运动页面教程
  20. mastercam 马扎克 mazake8800 卧式加工中心后处理器

热门文章

  1. 我要用近期业余时间看完这18本书
  2. 【Python】【Tkinter】png转ico小工具源码以及打包exe
  3. web测试之包含多个控件元素的注册页面,怎么进行快速测试?
  4. win10系统磁盘格式化 Win10系统如何解除安全模式
  5. 深度学习GPU环境安装教程:Ubuntu16.04+1080(Ti)显卡驱动+CUDA+cuDNN(已n次完美安装)
  6. 适配全面屏方法(无效)
  7. 用python绘制箱线图
  8. 【Matlab绘图进阶第7弹】Matlab绘制二维散点图
  9. STM32CUBEIDE(10)----ADC在DMA模式下扫描多个通道
  10. 如何完全去掉visio图中的阴影