最近用qt编写两个小程序,一个是解析ppm格式的图片,一个是将ppm格式的图片转存为bmp格式图片

首先要明确ppm和bmp格式图片的头

ppm:头部分由三部分组成,这三部分由回车或换行分割,但PPM的标准中是要求空格。

第一行通常是P3或P6,说明是PPM格式;

第二行是图象的宽度和高度,用ASCII来表示;

最后一部分是描述像素的最大颜色组成,这里允许描述超过一个字节(0-255)的颜色值。

另外可以在上面个部分的后面用#来追加注释,注释行是从#到该行末

例:P6

1024 778

255

头部分的后面为图像数据部分,像素点的(R、G、B)的排列。

bmp:

位图文件主要分为如下3个部分:

块名称

大小(Byte)

文件信息头

14

位图信息头

40

RGB颜色阵列

由图像长宽尺寸决定

文件信息头:

bfType

说明文件的类型,该值必需是0x4D42,也就是字符'BM'。

2byte

bfSize

说明该位图文件的大小,用字节为单位

4byte

bfReserved1

保留,必须设置为0

2byte

bfReserved2

保留,必须设置为0

2byte

bfOffBits

说明从文件头开始到实际的图象数据之间的字节的偏移量。这个参数是非常有用的,因为位图信息头和调色板的长度会根据不同情况而变化,所以你可以用这个偏移值迅速的从文件中读取到位数据。

4byte

位图信息头:

biSize

说明BITMAPINFOHEADER结构所需要的字数。

4byte

biWidth

说明图象的宽度,以象素为单位。

4byte

biHeight

说明图象的高度,以象素为单位。注:这个值除了用于描述图像的高度之外,它还有另一个用处,就是指明该图像是倒向的位图,还是正向的位图。如果该值是一个正数,说明图像是倒向的,如果该值是一个负数,则说明图像是正向的。大多数的BMP文件都是倒向的位图,也就是时,高度值是一个正数。

4byte

biPlanes

为目标设备说明位面数,其值将总是被设为1。

2byte

biBitCount

说明比特数/象素,其值为1、4、8、16、24、或32。但是由于我们平时用到的图像绝大部分是24位和32位的,所以我们讨论这两类图像。

2byte

biCompression

说明图象数据压缩的类型,同样我们只讨论没有压缩的类型:BI_RGB。

4byte

biSizeImage

说明图象的大小,以字节为单位。当用BI_RGB格式时,可设置为0。

4byte

biXPelsPerMeter

说明水平分辨率,用象素/米表示。

4byte

biYPelsPerMeter

说明垂直分辨率,用象素/米表示。

4byte

biClrUsed

说明位图实际使用的彩色表中的颜色索引数(设为0的话,则说明使用所有调色板项)。

4byte

biClrImportant

说明对图象显示有重要影响的颜色索引的数目,如果是0,表示都重要。

4byte

注:1、RGB颜色阵列的存储,实际存储的为B、G、R顺序;2、图片宽

X

每个像素的字节数!=

4的整数倍时要在每行的后面补上缺少的字节,以0填充;3、图片存储的第一行颜色序列为实为最后一行,所以按从小到大的顺序读像素点,那么得到的图像会是倒着的。

编写程序中的遇到的小问题:

ppm像素点的读取问题,两种方式读:1、一行为RGB三个值,一次读取一行,file.readLine(data,255);line =

tr(data);pos[index] = line.toInt();

以此取得每一个像素点,存在pos数组中, unsigned

int r = pos[f];img->setPixel(j,i,qRgb(r,g,b))

; i,j为屏幕位置。2、ppm文件以char*形式读出,file.read((char*)d,count);unsigned int r

= (unsigned int

)(d[pos]);img->setPixel(i,j,qRgb(r,g,b));

bmp图片文件存储问题:文件信息头与位图信息头的存储格式:我首先使用的是int16_t代表2byte,但不能实现图片正常显示,保存出的图片头信息错误。后改为uchar,无符号,2byte的定义,例:uchar

bfType[2];下标0为低位,1为高位。利用memcpy和memset进行赋值。

在将图片保存为bmp格式的时候,像素点的设置行的循环要从最大开始循环到0,for(int i =

height;i>0;i++)

,我程序中的height为高,控制行。

主要明确了两个图片的格式,练习了Qt。

linux bmp图片怎么转换成ppm,[转载]图片解析 ppm图片bmp图片格式相关推荐

  1. Linux把日志文件转换成xml,[转载]将 HTML 文件转换成 XML

    在 Java 专家 Michael Geisler 为 Builder 澳大利亚写的第一篇文章中,他向读者展示了如何使用 JTidy 将 HTML 文件转换成 XML. 有关 Java 的最重要的事情 ...

  2. 怎样把图片文件转换成.ico图标文件?

    怎样把图片文件转换成.ico图标文件? 比如把.bmp/.jpg/.gif等格式的文件转换成.ico文件.应该如何作呢? 有知道的大哥告知一下吧. 有答案啦!!! 答:怎样把图片文件转换成.ico图标 ...

  3. asp.net 将bmp格式图片怎么转换为jpg_PNG图片怎么转换成JPG?原来还可以这么转换...

    PNG和JPG的区别是,对于需要高保真的较复杂的图像,PNG虽然能无损压缩,但PNG与JPG相比,PNG格式的文件容量比较大,不适合日常的传播流通.如果需要上传的图片的网页不支持PNG格式的图片上传, ...

  4. 带字的图片如何转换成可编辑的文字?

    将图片文字转换成可编辑的文字,有很多方法可以选择,可以使用输入法打字的方法,将图片上的文字输入到电脑文档中:还可以使用OCR文字识别软件的方法,把图片文字识别出来,然后保存到word文档中: 上面的两 ...

  5. 扫描的图片怎么转换成word

    扫描的图片怎么转换成word 图片文字提取工具在现在的工作中经常回遇到,随着图片制作成本的降低,在很多场合都少不了图片文字的身影,虽然制作方便成本低但是使用起来并不是那么方便,因为它不能直接的复制,需 ...

  6. 怎么把图片文件转换成PDF文件

    除了office文件外,我们最常用的就是PDF文件了.因为PDF文件格式可以将文字.字型.格式.颜色及独立于 设备和分辨率的图形图像等封装在一个文件中.该格式文件还可以包含超文本链接.声音和动态影像等 ...

  7. JPG图片怎么转换成Word

    无论是在工作中,还是在生活中,我们接触最多的图片格式便是JPG图片格式.而现在很多的信息传输,也是通过JPG图片进行传输的,所以JPG图片转Word的问题也是在工作中避免不了的问题.那么我们应该怎样将 ...

  8. 如何把图片pdf转换成txt

    如何把图片pdf转换成txt 前段时间看到有午饭们在提问有没有PDF转成txt的软件,几经波折,现在找到了一款非常好的PDF转换成TXT转换器,就逼不及待地和大家分享出来了,需要的午饭们请及时下载喔  ...

  9. 怎么将png图片怎么转换成jpg格式

    如何将图片转换成JPG格式呢?由于JPG格式图片比较通用,有的是作为证件照上传,有的是设置论坛的头像等等原因,很多人从网上保存的图片会有png的格式,那么电脑怎么将png图片怎么转换成jpg格式呢? ...

  10. jpg格式图片怎么转换成Word?

    jpg格式图片怎么转换成Word?将jpg图片中的文字转换成Word文档里,当我们在一张图片中找到有文字的时候,我们就可以进行转换了,下面小编就简单给大家介绍一下jpg转换成Word. 步骤一:我们可 ...

最新文章

  1. 从n返回k个元素的所有组合的算法
  2. SQLServer制作一个包含三个表的视图
  3. 使用rapid-framework自动生成struct2
  4. 通过一道面试题来看 C++ 语言中的表达式求值
  5. 多用继承 android,Android温习之路之继承
  6. How to check accessibility errors via Web IDE
  7. 在C语言中巧用正则表达式
  8. 云原生时代业务架构的变革:从单体迈向Serverless
  9. SQL SERVER:开窗函数 SUM() OVER() 数据统计中一例使用
  10. 文本框根据输入内容自适应高度
  11. 21天jmeter打卡day6 配置元件之HTTP信息头+Cookie管理器
  12. 分享15款很棒的 JavaScript 开发工具
  13. Java springboot B2B2C o2o多用户商城 springcloud架构 (六)springboot整合mybatis
  14. Python自然语言处理学习笔记(23):3.7 用正则表达式文本分词
  15. JAVA:实现Gaussian高斯算法(附完整源码)
  16. 使用汉化版srvinstw.exe安装/卸载Windows系统服务
  17. 小米4 win10 刷回android,小米4怎么从win10刷回MIUI 小米4 win10刷回MIUI系统详细教程...
  18. 虚拟机器人(巡线竞速)
  19. Java对接圆通电子面单下单接口
  20. oracle中分组和排序,oracle中分组排序函数用法

热门文章

  1. 一份实用的seo整体优化方案
  2. 云虚拟服务器登录,云虚拟服务器登录
  3. linux dc命令,Linux中dc命令起什么作用呢?
  4. 2021年2月23日 星期二 八九 阴
  5. python绘制爱心气球_菲菲用python编程绘制的父亲节礼物
  6. 面试题:将字符串中的中英文分开显示
  7. 杨宁反思创业痛点:没有将项目和公司坚持下去
  8. python新建文件夹代码_Python文件夹与文件的操作实现代码
  9. Windows 服务器系统安全防御加固方法
  10. 伦敦旅游攻略及注意事项(201909)