我喜欢蓝天,也喜欢雨天。
分类: Windows平台
2013-08-16 15:24:36
1.位图和元文件是windows中存储图像信息的两种方式。位图是一个二维数组,与图像的像素一一对应。元文件是对图像的描述而不是数字化。位图与元文件的区别在于光栅图像(用离散的像素来处理输出设备)与矢量图像(用笛卡尔坐标系统来处理输出设备)的差别。
位图容易受设备依赖性的影响,并且存储空间大,但是速度快。
元文件可以移动独立的图形对象,比如一条直线,对图像缩放不失真。
位图可以手工创建,也可以由计算机生成.
2.设备相关位图 DDB(Device-Dependent-Bitmap)
DDB不具有自己的调色板信息,他的颜色模式必须与输出设备相一致。如:在256色以下的位图中存储的像素值是系统调色板的索引,其颜色依赖于系统调色板。由于DDB高度依赖输出设备,所以DDB只能存在于内存中,它要么在视频内存中,要么在系统内存中。
3.设备无关位图DIB(Device-Independent-Bitmap)
DIB具有自己的调色板信息,他可以不依赖系统的调色板。由于他不依赖于设备,所以通常用它保存文件。这是一种文件格式,是为了保证用某个应用程序创建的位图图形可以被其它应用程序装载或显示一样。
DIB的与设备无关性主要体现在以下两个方面:DIB的颜色模式与设备无关。例如,一个256色的DIB即可以在真彩色显示模式下使用,也可以在16色模式下使用。256色以下(包括256色)的DIB拥有自己的颜色表,像素的颜色独立于系统调色板。由于DIB不依赖于具体设备,因此可以用来永久性地保存图象。DIB一般是以*.BMP文件的形式保存在磁盘中的,有时也会保存在*.DIB文件中。运行在不同输出设备下的应用程序可以通过DIB来交换图象。
DDB必须是单色的或是与真实输出设备相同的格式。DIB是一个文本或者内存块;DDB是GDI位图对象并由位图句柄表示。DIB能被显示或转换为DDB,并转换回DIB,但是这里包含了设备无关和设备相关位之间的转换过程。
4.BitBlt 代表“位块传送”,将图像从视频显示的一个区域复制到另一个区域,此函数实际上对像素执行了一次位运算操作。目标图像和源图像的尺寸是相同的。
5.StretchBlt 在复制时拉伸或压缩图像尺寸,还允许水平或垂直翻转图像。参数坐标都是逻辑单位。
6.光栅操作:是像素的位操作。
7.PatBlt
8.HBITMAP hBitmap;
hBitmap = CreateBitmap();创建DDB的函数来获得句柄。
CreateBitmapIndirect();
9.内存设备描述表:
只位于内存,不是真正的图形输出设备,但可以说与某个实际设备"兼容".
10.加载位图资源: hBitmap = LoadBitmap(hInstance, szBitmapName);
11.影子位图:是位图的缓冲
1.设备无关位图DIB(Device-Independent-Bitmap)
DIB具有自己的调色板信息,他可以不依赖系统的调色板。由于他不依赖于设备,所以通常用它保存文件。这是一种文件格式,是为了保证用某个应用程序创建的位图图形可以被其它应用程序装载或显示一样。
DIB的与设备无关性主要体现在以下两个方面:DIB的颜色模式与设备无关。例如,一个256色的DIB即可以在真彩色显示模式下使用,也可以在16色模式下使用。256色以下(包括256色)的DIB拥有自己的颜色表,像素的颜色独立于系统调色板。由于DIB不依赖于具体设备,因此可以用来永久性地保存图象。DIB一般是以*.BMP文件的形式保存在磁盘中的,有时也会保存在*.DIB文件中。运行在不同输出设备下的应用程序可以通过DIB来交换图象。
2.紧缩DIB格式的位图
DIB文件减去前14个字节加载到连续的内存块中,这时就可以称它为“紧缩DIB格式的位图”.
3.DIB 文件有4个主要部分:
文件头 14个字节
信息头
RGB 色彩头(不一定有)
位图像素位
4.DIB从图像的底行开始,往上扫过图像。
5.显示DIB: 像素到像素
SetDIBitsToDevice ( hdc, // 设备环境句柄
0, // 目标矩形左上角的X轴坐标,按逻辑单位表示坐标
0, // 目标矩形左上角的Y轴坐标
bitmap24bit.bitmapinfoheader.biWidth, // 位图宽度,按逻辑单位表示宽度
bitmap24bit.bitmapinfoheader.biHeight, // 位图高度,按逻辑单位表示高度
0, // 位图左下角的X轴坐标,按逻辑单位表示坐标
0, // 位图左下角的Y轴坐标,按逻辑单位表示坐标
0, //DIB中的起始扫描线
bitmap24bit.bitmapinfoheader.biHeight, // DIB扫描线数目
(BYTE*)bitmap24bit.buffer, //位图数据区起始指针,是BYTE*类型.
(BITMAPINFO*)(&(bitmap24bit.bitmapinfoheader)),//位图的BITMAPINFO指针.这里要特别注意,因为Load_Bitmap_File函数使用的数据结构中没有BITMAPINFO结构,所以用BITMAPINFOHEADER来转变的.
DIB_RGB_COLORS) ; //最后一个是颜色使用类型.
StretchDIBits 可以缩放DIB尺寸的行和列,或以特定大小显示。
6.与设备有关的位图(DDB)和与设备无关的位图(DIB)类似设备坐标和逻辑坐标。