VC编程心得Word文档格式.docx

上传人:b****3 文档编号:15090650 上传时间:2022-10-27 格式:DOCX 页数:30 大小:39.95KB
下载 相关 举报
VC编程心得Word文档格式.docx_第1页
第1页 / 共30页
VC编程心得Word文档格式.docx_第2页
第2页 / 共30页
VC编程心得Word文档格式.docx_第3页
第3页 / 共30页
VC编程心得Word文档格式.docx_第4页
第4页 / 共30页
VC编程心得Word文档格式.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

VC编程心得Word文档格式.docx

《VC编程心得Word文档格式.docx》由会员分享,可在线阅读,更多相关《VC编程心得Word文档格式.docx(30页珍藏版)》请在冰豆网上搜索。

VC编程心得Word文档格式.docx

LONGbiHeight;

//位图以像素为单位的高

WORDbiPlanes;

//目标设备的平面数,必须为1

WORDbiBitCount;

//每一个色平面像素位数1、4

DWORDbiCompression;

//压缩类型BI_RGB,BI_REL4

DWORDbiSizeImage;

//图象以字节为单位的尺寸

LONGbiXPelsPerMeter;

//x方向的分辨率dpm

LONGbiYPelsPerMeter;

//y方向的分辨率dpm

DWORDbiClrUsed;

//实际使用色彩数

DWORDbiClrImportant;

//重要色彩数

}BITMAPINFOHEADER

24位真彩色图象存储格式

24位真彩色图象格式在16位编辑器(例如VC编辑器)中打开,可以看到图象的二进制数据。

24位真彩色的二进制数据为:

包括位图文件头、位图信息头和位图阵列三部分。

1、位图文件头

位图文件头用来记录文件大小的一些信息,在文件中占14个字节,存储的内容如下:

字节1234567891011121314

000000424DCCB402000000000036000000

其中:

424D为位图的标志,即ASCII码BM

CCB402表示位图文件的总字节数,换算成十进制为(CCB402)H=(177356)10,即这副图象的大小为177356字节。

00000000为保留字节,用来存储文件大小的数据;

3600000000表示位图阵列的起始位置,(36)H=(54)10即54字节开始为位图阵列。

2、位图信息头

位图信息头记录和位图相关的一些信息,在文件中占40个字节,存储的内容为:

字节12345678910111213141516

0000002800

00001600002C010000C5000000010018000000

000032000000000000120B0000120B00000000

000048000000000000

28000000表示信息头的长度,(28)H=(40)10,即信息头占40个字节;

2C010000表示位图宽度,单位为像素。

(012C)H=(300)10,即位图的宽度为300个像素。

C5000000表示位图高度,单位为像素。

(C5)H=(197)10,即位图的高度为197个像素。

0100表示位图设备级别

1800位图级别,(0018)H=(24)10,即24位真彩色;

00000000表示压缩类型,为零表示不压缩;

00000000保留字节;

120B0000表示水平分辨率

120B0000表示垂直分辨率

00000000表示位图实际使用的颜色表中的颜色变址数

00000000表示位图显示过程中被认为重要颜色变址数。

3、位图阵列

位图阵列,即像素表示部分,每个像素点由3个字节的数据组成,按照从左到右的顺序,分别表示蓝色、绿色、红色。

在VC++中的WINGDI.h中对于位图的编码和格式有更加详细的定义,下面给出24位真彩色位图格式在VC++中的定义。

TypedefstructtagBITMAPFILEHEADER{//位图文件头

WORDbfType;

//位图标志:

BM

DWORDbfSize;

//位图文件总字节数

WORDbfReseaved1;

WORDbfReseaved2;

DWORDbfOffBits;

}BITMAPFILEHEADER;

TypedefstructtagBITMAPINFOHEADER{//位图信息头格式定义

DWORDbiSize;

//位图信息头占用字节数

LONGbiWidth;

//位图图象宽度(以像素为单位)

LONGbiHeight;

//位图图象高度(以像素为单位)

WORDbiplanes;

//位图设备级别

WORDbiBitCount;

//位图级别设定,每个像素所需要的位数,必须是1(双色),

//4(16色),8(256色)或24(真彩色)之一

DWORDbiCompression;

//压缩类型

DWORDbiSizeImage;

//位图阵列表字节数

LONGbiXPelsPerMeter;

//水平分辨率

LONGbiYPelsPerMeter;

//垂直分辨率

DWORDbiClrUsed;

//位图实际使用的颜色表中的颜色变址数

DWORDbiClrImportant;

//位图显示过程中被认为重要颜色变址数

}BITMAPINFOHEADER;

TypedefstructtagRGBTRIPLE{//位图阵列格式定义

BYTErgbBlue;

//定义蓝色

BYTErgbGreen;

//定义绿色

BYTErgbRed;

//定义红色

}RGBTRIPLE;

//构成一个3字节的RGBTRIPLE

灰度位图存储格式

typedefstructtagBITMAPINFO{//bmi

BITMAPINFOHEADERbmiHeader;

RGBQUADbmiColors[1];

}BITMAPINFO;

灰度位图比24位真彩色位图增加了一部分:

颜色索引表(RGBQUAD)。

因此,灰度位图的像素阵列的起始位置不是第(36)H=(54)10个字节,而是第(436)H=(1078)10个字节,同时灰度位图用一个字节表示一个像素。

这样,灰度位图的像素阵列小了三分之二。

颜色索引表定义为:

typedefstructtagRGBQUAD

BYTEred;

BYTEgreen;

BYTEblue;

BYTEnull;

}tagRGBQUAD;

在实际的编程中,读取数据的方式发生了变化,除了要读取文件头,文件信息头外,还要设置变量读取颜色索引表。

除此以外,灰度图象的编程读取显示方式与24位真彩色位图的方式完全相同。

7字符格式:

.f符点数表示方法,例如要表示:

4.0符点数,可以表示成:

4.f;

还有,在进行除法运算,3/2时,结果是1,但若写成:

3/2.f,这时结果是1.5。

8HWNDGetDlgItem(intnID)const;

//返回指定子窗口的句柄;

HWNDGetDlgItem(

HWNDhDlg,//handleofdialogbox

intnIDDlgItem//identifierofcontrol

);

//返回指定子窗口中某一控件的句柄;

9//选中当前黑色画笔,并保存以前的画笔

CGdiObject*pOldPen=pDC->

SelectObject(pPenBlack);

10SetBkColor(:

:

GetSysColor(COLOR_APPWORKSPACE));

这里“:

”代表WindowsAPI函数(是SDK函数,不是MFC函数),全局作用域,全局变量。

与绘图有关的操作或信息

DC

11在Windows程序中,所谓的“设备环境(DC:

DeviceContext)”就是一种电子画布;

电子画笔被称为“GDI对象(GDIObject)”。

除画笔之外,GDI对象还包括画刷、字体、位图和调色板等。

应该说,GDI对象就是那些可以用来在设备环境上绘图的工具。

在Windows程序中,一个设备环境只能拥有一种画笔、一种画刷和一种字体,也就是说,一个设备环境不能同时拥有同一类型的多个GDI对象。

CDC

12在MFC中,CDC类实现了对设备环境的封装。

所有的绘图操作都必须通过一个CDC类(或其派生类)的对象来完成。

CDC类提供了许多函数,可以完成各种与设备环境有关的操作,如选择GDI对象、使用颜色与调色板、绘制图形、显示字体、设置设备环境的属性和坐标转换等。

CDC类的派生类包括:

CPaintDC类、CClientDC类、CWindowDC类和CMetaFileDC类。

CDC为我们提供了四个输出文本的函数:

TextOut、ExtTextOut、TabbedTextOut、DrawOut,分别用于不同的场合。

如果想要绘制的文本需要支持Tab符,那么采用TabbedTextOut函数,可以使绘制出来的文本效果更佳;

如果需要在一个矩形区域内绘制多行文本,那么采用DrawOut函数,会更富于效率;

如果文本和图形结合紧密,字符间隔不等,并要求有背景颜色或矩形裁剪特性,那么ExtTextOut函数就将是最好的选择。

如果没有什么特殊要求,那使用TextOut函数就显得简练多了。

GDI

13在MFC中,CgdiObject类封装了GDI对象。

但是,用户几乎不直接使用CgdiObject类,而是使用该类的派生类(包括:

Cpen类、Cbrush类、Cfont类、Cbitmap类、Cpalette类和Crgn类)。

其中,Crgn类封装了GDI区域,区域是窗口中特定的一块,通常用来指定操作的范围,以免干扰其他不需要修改的区域。

显示位图资源

CRectrect;

CDChMemDC;

GetClientRect(&

rect);

//获得客户窗口的大小

BITMAPBmp;

HBITMAPhbitmap=LoadBitmap(:

AfxGetInstanceHandle(),

MAKEINTRESOURCE(IDB_BITMAP_VIEW));

//装入位图资源

hMemDC.CreateCompatibleDC(NULL);

//创建内存设备上下文

SelectObject(hMemDC,hbitmap);

//位图选入上下文中

GetObject(hbitmap,sizeof(BITMAP),(LPSTR)&

Bmp);

//获得位图大小

StretchBlt(dc.m_hDC,0,0,rect.right,rect.bottom,

hMemDC,0,0,Bmp.bmWidth,Bmp

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 生物学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1