博文

BMP文件格式研究(2007-08-25 12:36:00)

摘要:前言:这是我研究bmp文件格式的一篇学习笔记。         BMP文件中文成为位图文件,实际上取自Bit Map的缩写。位图分为四种: 线画稿:只有黑白两种颜色,所以像素用0,1表示 灰度图象:在灰度图像中,像素灰度用8bit表示,像素灰度级用8bit表示,所以每个像素都是介于黑色和白色之间的256种的灰度的一种。 索引图像:在真彩色出现之前,由于技术上的原因,计算机在处理时并没有达到每像素24位的真彩色水平,为此人们创造了索引颜色。索引颜色通常也被称为映射颜色,在这种模式下,颜色都是预先定义的,并且可供选用的一组颜色也有限,索引颜色的图像最多只能显示256种颜色。一幅索引颜色图像在图像文件里定义,当打开该文件时,构成该图像具体颜色的索引值就被读入程序里,然后根据索引值找到最终的颜色。 真彩色图像:在真彩色图像中,每一个像素由红、绿和蓝三个字节组成,每个字节为8bit,表示0~255之间的不同的亮度值,这三个字节组合可以产生1670万种不同的颜色。   1.     BMP文件组成
BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成。
2. BMP文件头
BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置等信息。

其结构定义如下:

typedef struct tagBITMAPFILEHEADER
{
WORDbfType; // 位图文件的类型,必须为BM
DWORD bfSize; // 位图文件的大小,以字节为单位
WORDbfReserved1; // 位图文件保留字,必须为0
WORDbfReserved2; // 位图文件保留字,必须为0
DWORD bfOffBits; // 位图数据的起始位置,以相对于位图
// 文件头的偏移量表示,以字节为单位
} BITMAPFILEHEADER;

3. 位图信息头

BMP位图信息头数据用于说明位图的尺寸等信息。
typedef struct tagBITMAPINFOHEADER{
DWORD biSize; //......

阅读全文(4110) | 评论:1

UCanImg工程正式开工!(2007-08-19 15:10:00)

摘要:              朱金灿                         我终于觉得必须给自己一点压力,或者给一个挑战自己潜力的机会,于是决定自己做一个遥感图像处理系统,初步命名为UCanImg,意义是you can make a image progessing system(你可以制造一个遥感图像处理系统)。 目的: 熟悉数字图像处理的各种算法,为高校的数字图像处理课程提供一种参考(在适当的时候会开源,至于采用哪种开源协议现在还未想好),保留成为商业软件的权利。   现在能想到的这个图像处理系统的功能是: 1.对通用图像格式的读取和浏览; 2.对各大图像处理系统(如ERDAS IMAGINE、PCI和ENVI )的文件格式的读取和浏览 3.常用图像处理 4.高光谱方面的处理 5.不打算提供一种宏语言进行二次开发,但会提供接口供主流开发语言进行二次开发 6.主要的模块划分参考成熟的图像处理系统。 7.争取做到跨平台,如把系统移植到Ubuntu Linux和Debian Linux等等。   依靠力量: 1.       成熟开源代码,如GDAL库和Cximage,…… 2.       图书:《VC++实践与提高——数字图像处理与工程应用篇》、《数字图像处理》(冈萨雷斯著)…… 3.       论坛:CSDN,www.image2003.com,研学论坛,...... 4.   朋友:......   开发工具: VC++6.0,开发平台是:Windows XP sp2。以后或许要开发一个java版本的。   开发计......

阅读全文(2803) | 评论:1

在VC6.0中使用GDI+的两种办法(二)(2007-05-06 15:46:00)

摘要:                            朱金灿   第二种方法是我参考网上的一个做法。 1.首先将GDI+的头文件拷贝进vc目录下的Includes(我的是:D:\Microsoft Visual Studio\VC98\Include),将GDI+的库文件vc目录下的Lib文件夹中(我的是:D:\Microsoft Visual Studio\VC98\Lib)   2.新建一个MFC单文档工程EmployGdiPlus。   3. 在Project->stting->Link->Object/libary中加入gdiplus.lib。   4.添加画图代码,代码如下: void CEmployGdiPlusView::OnDraw(CDC* pDC) {        CEmployGdiPlusDoc* pDoc = GetDocument();        ASSERT_VALID(pDoc);        // TODO: add draw code for native data here        HDC hdc = pDC->GetSafeHdc();        Graphics mygraphics(hdc);//???¡§?"??Graphics??¨®     SolidBrush brush(Color(100,0,0,255));//        Fon......

阅读全文(3592) | 评论:0

在VC6.0中使用GDI+的两种办法(一)(2007-05-06 15:41:00)

摘要:朱金灿        GDI+是GDI的升级版本。在VC6.0中并没有配备GDI+的相关文件。那么如何在VC6.0使用GDI+呢?我从网上搜索了一些资料,并结合自己的使用,总结出一下两种方法。下面我各建一个MFC工程介绍这两种做法。   1.  找到GDI+库文件和头文件,把它放到一个文件夹GDI+Files。这个文件夹包括30个头文件和一个库文件。   2.新建一个单文档工程“UseGdiPlus”,把文件夹GDI+Files拷贝进工程文件夹。   3.进行工程设置,选择VC的Project菜单栏的Setting菜单项,在对话框中的C/C++选项卡中的Category一栏中选择General, 在Project Options中加入一个选择:/I "GDI+Files",如下图所示:
在Project->stting->Link->Object/libary中加入GDI+Files\GdiPlus.lib。   4.新建一个.h文件QGdiPlus.h,该头文件的内容如下:   #pragma once   // Add GDI+ support to MFC or WTL application. // // Include this file in StdAfx.h // // MFC: Add a QGdiPlus variable to your application class to start and stop GDI+. // ATL: Create a QGdiPlus local variable in _tWinMain. // Constructor starts, destructor stops.       // Ensure that GdiPlus header files work properly with MFC DEBUG_NEW and STL header files. // Q317799: PRB: Microsoft Foundation Classes DEBUG_NEW Doe......

阅读全文(5317) | 评论:0