位图图像基础
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 位图文件—1.2 BMP位图
3 . 索引图像(伪彩色图像) 产生原因:在真彩色出现之前, 由于技术上的原因,计算 机在处理时并没有达到每像素24位的真彩色水平,为此人们 创造了索引颜色,即使用颜色表也就是调色板。 原理:在这种模式下,颜色都是预先定义的,并且可供选用 的一组颜色也很有限,索引颜色的图像最多只能显示256种 颜色。 显示过程:一幅索引颜色图像在图像文件里定义,当打开该 文件时,构成该图像具体颜色的索引值就被读入程序里,然 后根据索引值找到最终的颜色。
2 位图文件结构—2.1概述
2.1 概述
位图文件由三部分组成:文件头+位图信息+位图像素 数据
位图文件头BITMAPFILEHEADER, 它是一个结构体。 位图信息BITMAPINFO是结构体,位图信息由两部分组
成:位图信息头 + 彩色表 总结:可以看出位图文件由4个部分组成:
位图文件头(bitmap-file header)、 位图信息头(bitmap-information header)、 彩色表(color table):调色板 位图数据:定义位图的字节阵列。
Windows 3.0以前的BMP图文件格式与显示设备有关,因此把 这种BMP图象文件格式称为设备相关位图DDB(devicedependent bitmap)。
Windows 3.0以后的BMP图象文件与显示设备无关,因此把这 种BMP图象文件格式称为设备无关位图DIB(deviceindependent bitmap)。
1 位图文件—1.2 BMP位图
2. 灰度图像
在灰度图像中,像素灰度级一般用8 bit表示,所以每 个 像 素 都 是 介 于 黑 色 ( 0 ) 和 白 色 ( 255 ) 之 间 的 256 (28=256)种灰度中的一种。
0 150 200 I 120 50 180
250 220 100
矢量图的特点: 矢量图的两个优点:一是它的文件数据量很小;二是图像质量与分
辨率无关,这意味着无论将图像放大或缩小了多少次,图像总是以显示 设备允许的最大清晰度显示。
矢量图有一个明显的缺点,就是不易制作色调丰富或色彩变化太多 的图像,而且绘出来的图像不是很逼真,同时也不易在不同的软件间交 换文件。 在Corel Draw和Adobe Illustrator中生成的图像均为矢量图 。
(2)这个值通常为0,若该值为0,则使用的颜色数为2的biBitCount次方种。表 示使用biBitCount确定的全部颜色
(3)这个值通常为0,表示所有的颜色都是必需的 biXPelsPerMeter; //目标设备水平分辨率 biYPelsPerMeter; //目标设别
垂直分辨率
2 位图文件结构—2.2 文件结构
1 位图文件—1.2 BMP位图
1.2 BMP位图 1.2.1 什么是BMP位图?
位图是由像素点构成一幅图像,每个像素具有颜 色属性和位置属性。
Windows把位图分为两类:设备无关位图DDB,设 备相关位图DIB
1 位图文件—1.2 BMP位图
DDB位图没有调色板,其数据结构与设备有关的,显示 的颜色依赖硬件 ,故此位图又称为DDB位图(DeviceDependent Bitmap)。当用户的程序取得位图数据信息时, 其位图显示方式视显示卡而定。由于GDI位图的这种设备依 赖性,当位图通过网络传送到另一台PC,很可能就会出现问 题。
2 位图文件结构—2.2 文件结构
位图信息也是结构体,定义如下: 位图信息作用:所记录的值用于分配内存,设置调色板信息, 读取像素值等。
2 位图文件结构—2.2 文件结构
位图信息头也是结构体,定义如下:
2 位图文件结构—2.2 文件结构
说明: biSize; //该结构的长度,为40字节
default: cout<<"单位像素位数未知"<<endl;
1024/16=64行;
BMP文件格式示例 2
256色灰度图, biHeight是正值。 观察它的调色板数据
BMP文件格式示例 3
biHeight的第二个应用。该值是一个正值,说明图像是 倒向的,该值是负值,说明图像是正向的。大多数的BMP是 倒向位图,也就是说,图像高度是一个正值。
下例中,我把hiHeight改为负值,观察图案
调色板定义如下:是对那些需要调色板的位图文件而言的。
真彩色图像是不需要调色板的,BITMAPINFOHEADER后直接是 位图数据。调色板实际上是一个数组,共有biClrUsed个元 素(如果该值为零,则有2的biBitCount次方个元素)。数 组中每个元素的类型是一个RGBQUAD结构, 占4个字节。
//读位图文件头
fread(&BitmapInfo,sizeof(BITMAPINFO),1,fp);
//读位图信息
fclose(fp);
//关闭文件
cout<<"位图文件名称为:"<<argv[1]<<endl;
cout<<"位图文件类型为:"<<(char)BitmapFileHeader.bfType;
DIB位图自带颜色信息即调色板。且任何运行Windows的 机器都可以处理DIB,并通常以后缀为.BMP的文件形式被保 存在磁盘中或作为资源存在于程序的EXE或DLL文件中。
一般我们讨论的是DIB位图。
1 位图文件—1.2 BMP位图
小结:Windows系统内部各图像绘制操作都是以BMP为基础的。
*:需要加以注意的部分,它们是在进行位图操作时经常参考的变量 (1)每个像素的字节数:
0,用在JPEG格式中 1,单色图,调色板有两种颜色,即黑白图片 4,16色图 8,256色图,通常说的灰度图 16,64K图,无调色板,图像数据中每两个字节表示一个像素,5个或6个 位表示一个RGB分量 24,16M真彩色图,无调色板,图像数据中每3个字节表示一个像素,每个 字节表示一个RGB分量 32,4G真彩色,无调色板,每4个字节表示一个像素,相对24位真彩图而 言,加入了一个透明度,即RGBA模式
什么是矢量图?
是用一系列绘图指令来表示一幅图,如AutoCAD中的绘图语句。这种 方法的本质是用数学(更准确地说是几何学)公式描述一幅图像。图像中每 一个形状都是一个完整的公式,称为一个对象。对象是一个封闭的整体, 所以图像上对象的变化都不会影响到图像中的其他对象。
1 位图文件—1.1数字图像类型
位图文件结构程序示例----读取位图文件 属性程序
位图文件是Windows操作系统中很重要的一种图形 格式,本例是对位图文件的简单操作。
本程序用到的结构体和函数有:
BITMAPFILEHEADER //位图文件头结构体
BITMAPINFO
//位图信息结构体
fread()函数 //文件读函数
1 位图文件—1.2 BMP位图
位图又可以分成如下四种: (LineArt)、灰度图像(GrayScale)、索引颜色
图像(Index Color)、真彩色图像(True Color) 1. 线画稿
线画稿只有黑白两种颜色。每个像素占1位,值为0或1。
1 0 0 I 0 0 1
1 1 0
cout<<"图像高度:"<<BitmapInfo.bmiHeader.biHeight<<"点"<<endl;
switch(BitmapInfo.bmiHeader.biBitCount)
//每个像素的位数
{
case 0: cout<<"JPEG图"<<endl;
break;
case 1: cout<<"单色图"<<endl;
1 位图文件—1.2 BMP位图
4. 真彩色图像
在真彩色图像中,每一个像素由红、绿和蓝三个字节组 成, 每个字节为8 bit,表示0到255之间的不同的亮度值,这三 个字节组合可以产生1670万种不同的颜色。
第三章 位图文件基础
1
位图文件
2
位图文件结构
3 Visual C+ + 图像处理编程基础
位图文件结构程序示例----读取位图文件 属性程序
算法分析 ① 定义位图文件头结构变量BitmapFileHeader; ② 定义位图信息结构变量BitmapInfo; ③ 打开指定文件; ④ 使用函数fread分别读取位图文件头和位图信息; ⑤ 关闭指定文件。并显示位图文件名称、位图文
件类型、图像宽度、图像高度和每个像素的位数。
#include<iostream.h>
#include<afx.h>
#include<stdio.h>
void main(int argc,char *argv[])
{ if(argc<2){ cout<<"用法:Example3_12 <位图文件名称>"<<endl;
exit(1); }
BITMAPFILEHEADER BitmapFileHeader;
2 位图文件结构—2.1概述
2 位图文件结构—2.2 文件结构
2 位图文件结构—2.2 文件结构
位图文件头定义如下:
这个结构的长度是固定的,为14个字节(WORD为无符号16位二进制整数, DWORD为无符号32位二进制整数)。
说明:其中的bfType值应该是“BM”(0x4d42),标志该文件是位图文件。 bfSize的值是位图文件的大小。
数字图像处理
山东大学威海分校信息工程学院
张亚涛 讲师
第三章 位图文件基础
1
位图文件
2
位图文件结构
3 Visual C+ + 图像处理编程基础
2
1 位图文件—1.1数字图像类型
1.1数字图像类型
静态图像可分为矢量(Vector)图和位图(Bitmap), 位图也称为栅 格图像、点阵图、像素图 (每个栅格就是像素)。 1.1.1 矢量图
cout<<(char)(BitmapFileHeader.bfType/0x100)<<endl;
cout<<"位图文件的大小:"<<BitmapFileHeader.bfSize<<"bytes"<<endl;
cout<<"图像宽度:"<<BitmapInfo.bmiHeader.biWidth<<"点"<<endl;
2 位图文件结构—2.2 文件结构
图像数据。
对于用到调色板的位图,图像数据就是该像素颜色在调色板中
的索引值。
对于真彩色图像,
R、 G、 B 值。
对于2色位图,用1位就可以表示该像素的颜色(一般0表示黑,
1表示白),所以一个字节可以表示8个像素。
对于16色位图,用4位可以表示一个像素的颜色,所以一个字
break;
case 4: cout<<"16色图"<<endl;
break;
case 8: cout<<"256色图"<<endl;
break;
case 16: cout<<"64K图"<<endl;
break;
case 24: cout<<"16M真彩色图"<<endl; break;
case 32: cout<<"4G真彩色图"<<endl; break;
节可以表示2个像素。
对于256色位图,一个字节刚好可以表示1个像素。
对于24真彩色图,无调色板,图像数据中每3个字节表示一个
像素,每个字节表示一个RGB分量
BMP文件格式示例 1
256色图案,图像分辨率1104 * 784
图像数据从0436H开始。 256色调色板,有 256项;所占字节数:256*4=1024;
注:Windows 3.0以后,在系统中仍然存在DDB位图,象 BitBlt()函数就是基于DDB位图的,只不过如果你想将图像 以BMP格式保存到磁盘文件中时,微软极力推荐你以DIB格式 保存,目的是为了让Windows能够在任何类型的显示设备上 显示所存储的图象。
扩展名:BMP位图文件默认的文件扩展名是BMP或者bmp(有时 它也会以.DIB或.RLE作扩展名)。
//定义位图文件头
结构变量
BITMAPINFO BitmapInfo;
//定义位图信息结
构变量
FILE *fp=fopen(argv[1],"rb");
//打开命令行指定
的文件
if(fp==NULL){ cout<<"文件:"<<argv[1]<<"打开错误"<<endl; exit(1); }
fread(&BitmapFileHeader,sizeof(BITMAPFILEHEADER),1,fp);