在窗口中绘制相关位图,图标,设备无关位图

合集下载

《数字图像处理》课程教学大纲

《数字图像处理》课程教学大纲

二、课程章节主要内容及学时分配第一章、数字图像处理方法概述讲课3课时了解本课程研究的对象、内容及其在培养软件编程高级人才中的地位、作用和任务;了解数字图像处理的应用;了解数字图像的基本概念、与设备相关的位图(DDB)、与设备无关的位图(DIB);了解调色板的基本概念和应用;了解CDIB类与程序框架结构介绍;了解位图图像处理技术。

重点:CDIB类与程序框架结构介绍。

难点:调色板的基本概念和应用。

第二章、图像的特效显示讲课3课时、实验2学时了解扫描、移动、百叶窗、栅条、马赛克、渐显与渐隐、浮雕化特效显示。

重点:渐显与渐隐。

难点:马赛克。

第三章、图像的几何变换讲课2课时了解图像的缩放、平移、镜像变换、转置、旋转。

重点:镜像变换。

难点:旋转。

第四章、图像灰度变换讲课3课时、实验2学时了解非0元素取1法、固定阈值法、双固定阈值法的图像灰度变换;了解灰度的线性变换、窗口灰度变换处理、灰度拉伸、灰度直方图、灰度分布均衡化。

重点:灰度直方图。

难点:灰度分布均衡化。

第五章、图像的平滑处理讲课3课时了解二值图像的黑白点噪声滤波、消除孤立黑像素点、3*3均值滤波、N*N 均值滤波器、有选择的局部平均化、N*N中值滤波器、十字型中值滤波器、N*N最大值滤波器、产生噪声。

重点:消除孤立黑像素点、中值滤波器。

难点:有选择的局部平均化。

第六章、图像锐化处理及边缘检测讲课3课时、实验2学时了解梯度锐化、纵向微分运算、横向微分运算、双方向一次微分运算、二次微分运算、Roberts边缘检测算子、Sobel边缘检测算子、Krisch边缘检测、高斯-拉普拉斯算子。

重点:Roberts边缘检测算子、高斯-拉普拉斯算子。

难点:梯度锐化。

第七章、图像分割及测量讲课4课时了解图像域值分割、轮廓提取、轮廓跟踪、图像的测量。

重点:轮廓提取、轮廓跟踪。

难点:图像的测量。

包括:图像的区域标记、图像的面积测量及图像的周长测量。

第八章、图像的形态学处理讲课3课时了解图像腐蚀、图像的膨胀、图像开启与闭合、图像的细化、图像的粗化、中轴变化。

西安交大数字图像处理第一次作业

西安交大数字图像处理第一次作业

数字图像处理第一次作业姓名:班级:学号:提交日期:2015年3月13日摘要本次报告首先简单阐述了BMP图像格式及其相关数据结构,随后主要完成了作业要求中关于图像处理与计算的各项任务。

本次作业以Matlab 2014为平台,通过对lena.bmp,elain.bmp图像文件的编程处理,分别得到了lena.bmp图像的8到1级灰度逐级递减显示,lena.bmp图像的均值和方差,通过近邻、双线性和双三次插值法对lena.bmp进行4倍放大后得到的2048×2048尺寸图像,和对lena.bmp、elain.bmp图像分别进行水平偏移变换和旋转变换后的图像及其4倍插值放大图像。

以上任务完成后均得到了预期的结果。

1.Bmp图像格式简介。

1.1 BMP格式概述BMP(全称Bitmap)是Windows操作系统中的标准图像文件格式,可以分成两类:设备相关位图(DDB)和设备无关位图(DIB),使用非常广。

它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。

BMP文件的图像深度可选lbit、4bit、8bit及24bit。

BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。

1.2 BMP格式组成典型的BMP图像文件由四部分组成:(1)位图头文件数据结构,它包含BMP图像文件的类型、显示内容等信息;(2)位图信息数据结构,它包含有BMP图像的宽、高、压缩方法,以及定义颜色等信息;(3)调色板,这个部分是可选的,有些位图需要调色板,有些位图,比如真彩色图(24位的BMP)就不需要调色板;(4)位图数据,这部分的内容根据BMP位图使用的位数不同而不同,在24位图中直接使用RGB,而其他的小于24位的使用调色板中颜色索引值。

1.3 BMP格式对应数据结构BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成。

1.3.1 BMP文件头(14字节)BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置等信息。

CDC绘图

CDC绘图

图形设备接口一、GDI、DC的概念1.GDI:(Graphics Device Interfase)图形设备接口,是一个应用程序与输出设备之间的中介。

一方面,GDI向应用程序提供一个与设备无关的编程环境,另一方面,它又以设备相关的格式和具体的设备打交道。

user32.dll2.DC:(Device Context)设备描述表,是一种Windows数据结构。

包括了与一个设备的绘制属性相关的信息。

所有的绘制操作通过一个设备描述表进行,绘制线条、形状和文本的Windows API 函数都与DC有关。

二、在Windows Application程序中画线1.定义两个全局变量用于记录鼠标按下的(x,y)坐标。

int nOrginX;int nOrginY;2.响应鼠标按下和鼠标抬起的消息:在Swich中加入case WM_LBUTTONDOWN:case WM_LBUTTONUP:3.在鼠标按下时记录鼠标按下的(x,y)坐标,查MSDN得知WM_LBUTTONDOWN lParam的低字存放x坐标,高字存放y坐标,将其取出存入nOrginX,nOrginY。

case WM_LBUTTONDOWN:nOrginX=lParam & 0x0000ffff;nOrginY=lParam >> 16 & 0x0000ffff;break;4.在鼠标抬起时画线:case WM_LBUTTONUP:HDC hdc;hdc=GetDC(hwnd);PAINTSTRUCT ps;::MoveToEx(hdc,nOrginX,nOrginY,NULL);::LineTo(hdc,LOWORD(lParam),HIWORD(lParam) );::ReleaseDC(hwnd,hdc);三、在MFC程序中画线:1.在CxxxView(其中xxx是你的工程名字)中响应鼠标按下和鼠标抬起的消息(因为只有CxxxView中才能接收到鼠标消息):使用ClassWizard加入WM_LBUTTONDOWN,WM_LBUTTONUP的消息响应函数OnLButtonDown, OnLButtonUp。

用Visual C++显示位图的原理与方法(同名26600)

用Visual C++显示位图的原理与方法(同名26600)

用Visual C++显示位图的原理与方法(同名26600)一、介绍在VC++环境下显示位图并不是什么新技术,但本文仍然在此“老调重弹”的原因是:(1)这一技术十分重要,它是图像编程的基础,掌握不了这些基本原理也就很难独立开发出符合实际需要的应用程序;(2)许多关于VC++编程的资料都提供了显示位图(Bitmap)的实例,但遗憾的是,由于侧重点的不同使得有关调色板、设备上下文(DC)以及图形设备接口(GDI)等与位图密切相关的知识要么是很少提到,要么就是很不全面、一代而过,或者部分内容被放到了别处,显得支离破碎。

这使得许多读者在模仿这些例子“克隆”出自己的应用程序后,仍感到有许多不解之处存在;(3)为了显示位图,Windows 及MFC提供了一些类和函数供我们利用,熟悉它们的作用对我们编程很有帮助。

二、基本概念与原理调色板:调色板的概念必须首先介绍,它在除24位真彩色显示系统的其它系统中都要用到。

尽管多媒体技术的发展令计算机所能显示的色彩越来越绚丽缤纷,但实际上,自然界无限种类的颜色目前仍无法在计算机上完全表达出来。

现在最高级的所谓24位“真彩色”的显示系统也只能显示既16,777,216种颜色,当然,这已经完全够用了,因为人眼还没有能力区分真彩色系统表现出的颜色与大自然中实际颜色的区别。

在这种系统中,每一个像素的值都用红(R)、绿(G)、蓝(B)三色,每色8位共24位来表示,“24位”显示系统的名字也由此而来,所以,其像素值就是要显示的颜色值,显然,此时只需要直接显示就行了,而不需要调色板。

但对于目前许多4位(16色)或8位(256色)显示系统来说,其像素值与颜色值并不一一对应,此时,调色板技术被派上了用场。

调色板的定义如下:它是在16色或256色显示系统中,由图像中出现最频繁的16或256种颜色组成的颜色表。

它依靠有限种颜色通过组合来实现其它颜色。

若某幅图像是使用调色板的话,那它的像素值就表示颜色在调色板查找表中的索引号,而不是颜色值。

《Visual_C++程序设计教程》第三章MFC中的资源与界面设计

《Visual_C++程序设计教程》第三章MFC中的资源与界面设计
1.MFC概述 MFC中的各种类结合起来构成了一个应用程序框架,它的 目的就是让程序员在此基础上建立Windows下的应用程序, 这是一种相对SDK来说更为简单的方法。总体上,MFC框 架定义了应用程序的轮廓,并提供了用户接口的标准实现 方法,程序员所要做的就是通过预定义的接口把具体应用 程序特有的东西填入这个轮廓。Microsoft Visual C++提 供了相应的工具来完成这个工作:AppWizard可以用来生 成初步的框架文件(代码和资源等);资源编辑器用于帮 助程序员直观地设计用户接口;ClassWizard用来协助将 代码添加到框架文件中;编译则是通过类库实现了应用程 序特定的逻辑。
3.2.5 位图
位图是一个与显示像素对应的点阵结构,它由 一系列按位排列的数据组成,这些数据分别表 示各个像素点的颜色信息。位图的颜色数目与 用来存放颜色数据的位数直接相关,常见的有 2色、4色、16色、256色、增强色(16位) 和真彩色(32位和24位)等。Windows支持两 种类型的位图:设备相关位图(Device Dependent Bitmap,DDB)和设备无关位图 (Device Independent Bitmap,DIB)。
5)视图 视图类从CView或它的派生类派生。视图和文档联系在一起, 在文档和用户之间起中介作用,即视图在屏幕上显示文档的 内容,并把用户的输入转换成对文档的操作。 6)文档模板 文档模板类一般不需要派生。MDI应用程序使用多文档模板 类CMultiDocTemplate,SDI应用程序使用单文档模板类 CSingleDocTemplate。 应用程序通过文档模板类对象来管理上述对象(应用程序对 象、文档对象、主边框窗口对象、文档边框窗口对象和视图 对象)的创建。
3.1.3 MFC消息管理

windows高级编程技术习题1

windows高级编程技术习题1

(1) 项目工作区一般在集成开发环境的左侧。

它展示一个工程的几个方面,它们分别是类视图、资源视图和文件视图。

(2) 编译程序的快捷键是Ctrl + F7,链接的快捷键是F7 ,运行程序的快捷键是Ctrl + F5。

(3) 项目工作区文件的扩展名为.dsw。

(4) 应用程序向导AppWizard的作用是帮助用户一步步生成一个新的应用程序,并且自动生成应用程序所需的基本代码,通过ClassWizard可以增加消息映射和成员变量。

(5) 菜单选择可以通过两种方法来进行:一种是;另一种是。

(6) 编译微型条工具栏最右边按钮的功能是设置断点。

2. 选择题(1) 工程文件的扩展名是 b 。

A. .exe B. .dsp C. .dsw D. .cpp(2) 设置断点的默认方式是 d 。

A. LocationB. DataC. MessageD. Breakpoints(3) 用应用程序向导AppWizard创建的C++源文件,应选择 a 选项卡。

A. FilesB. ProjectsC. WorkspacesD. Other Documents(4) Standard工具栏中最左边按钮与 c 菜单命令的功能一样。

A. NewB. New FileC. New Text FileD. New Workspace3. 判断题(1) 用快捷键F9既可设置断点,又可取消断点。

( T )(2) 用户可以通过Tools | Customize菜单命令设置集成开发环境的工具栏。

( T )(3) 通过应用程序向导AppWizard建立的程序不能被立即执行。

( T )(4) 调式程序时,会同时出现Variable窗口和Watch窗口。

( T )4. 简答题(1) 什么是工程? 它是由什么组成的?在Visual C++集成开发环境中,把实现程序设计功能的一组相互关联的C++源文件、资源文件以及支撑这些文件的类的集合称为一个工程。

06图形设备接口GDI基本概念

06图形设备接口GDI基本概念

设备坐标系分为屏幕坐标系、窗口坐标系和客户区坐标系三种相互独立的坐标系。屏幕坐标系以屏幕左上角为原点,一些与整个屏幕有关的函数均采用屏幕坐标,如GetCursorPos()、SetCursorPos()、CreateWindow()、MoveWindow()。弹出式菜单使用的也是屏幕坐标。窗口坐标系以窗口左上角为坐标原点,它包括窗口标题栏、菜单栏和工具栏等范围。客户区坐标系以窗口客户区左上角为原点,主要用于客户区的绘图输出和窗口消息的处理。鼠标消息的坐标参数使用客户区坐标,CDC类绘图成员函数使用与客户区坐标对应的逻辑坐标。
1. GDI的一些基本概念
Windows绘图过程和设备无关性的实现:
GDI处于设备驱动程序的上一层,当程序调用绘图函数时,GDI将绘图命令传送给当前设备的驱动程序,以调用驱动程序提供的接口函数。驱动程序的接口函数将Windows绘图命令转化为设备能够执行的输出命令,实现图形的绘制。不同设备具有不同的驱动程序,设备驱动程序是设备相关的。
如果采用MFC方法编程,MFC提供了不同类型的DC类,每一个类都封装了DC句柄,并且它们的构造函数自动调用获取DC的API函数,析构函数自动调用释放DC的API函数。因此,在程序中通过声明一个MFC设备环境类的对象就自动获取了一个DC,而当该对象被销毁时就自动释放了获取的DC。MFC AppWizard应用程序向导创建的OnDraw()函数自动支持所获取的DC。MFC的DC类包括CDC、CPaintDC、CClientDC、CWindowDC和CMetaFileDC等,其中CDC类是MFC设备环境类的基类,其它的MFC设备环境类都是CDC的派生类。
获取设备环境DC的方法:
在程序中不能直接存取DC数据结构,只能通过系统提供的一系列函数或使用设备环境的句柄HDC来间接地获取或设置设备环境结构中的各项属性,如显示器高度和宽度、支持的颜色数及分辨率等。如果采用SDK方法编程,获取DC的方法有两种:在WM_PAINT消息处理函数中通过调用API函数BeginPaint()获取设备环境,在消息处理函数返回前调用API函数EndPaint()释放设备环境。在其他函数中通过调用API函数GetDC()获取设备环境,调用API函数ReleaseDC()释放设备环境。

windows编程技术第7章 图形程序的编程基础

windows编程技术第7章 图形程序的编程基础
(5) RoundRect
绘制圆角矩形函数原型
BOOL RoundRect(HDC hdc,int upX,int upY,int lowX,int lowY, int curveX,int curveY);
upX,upY
curveY curveX
lowX,lowY
7.3.6 LINEDEMO 画图程序

7.1.3 GDI提供的其他功能

映射模式和变换 √ Metafile(它是GDI命令的集合,主要用于通 过剪贴板传输向量图形) 绘图区域√ 路径 裁剪 调色盘(板) 打印
7.2.2 取得设备描述表中信息的方法
iValue = GetDeviceCaps(hdc,iIndex);
此函数用于画折线,并改变“当前位置”
Polyline(HDC hdc, LPPOINT Array, int numOfPoint);
PolylineTo
把Array中的最后一 个点设定为设备 描述表的“当前 位置”
7.3.3 画正弦曲线程序SINEWAVE

这个程序有一个含有1000个POINT结构 (点对)的数组。随着for循环从0增加到 999,结构的x成员设定为从0递增到数组 cxClient。结构的y成员设定为一个周期的正 弦曲线值,并被放大以填满客户区。整个 区县的绘制仅仅使用了一个Polyline调用。

逻辑画笔是一种GDI对象,有线宽、线形、颜色 等属性
hPen = GetStockObject(WHITE_PEN); hOldPen = SelectObject(hdc,hPen);

在WM_DESTROY消息期间,应用程序即将结束, 程序不再需要以创建的逻辑画笔,所以应该将这 些画笔删除以释放其占用的系统资源。

医学图像处理实验报告

医学图像处理实验报告

医学图像处理实验报告班级专业生物医学工程姓名学号实验一用Vc++实现DDB和DIB位图的显示一、实验目的(1)了解VC++在医学图像处理中的应用。

(2)熟悉用VC++进行DDB和DIB位图显示的编程方法。

二、实验设备微机。

三、实验内容(1)应用VC++进行DDB和DIB位图显示。

四、实验步骤1、开启VC++6.0,在菜单中选中File单击鼠标左键,在下拉菜单中选中New 单击鼠标左键,在打开的对话框中,根据MFC Appward向导创建可执行的应用程序ShowBmp。

2、在程序中插入位图资源,并添加代码实现位图的显示。

3、在程序中插入Dib类,并添加相应的代码。

4、编程完毕,调试和运行程序,运行无误后,显示DDB和DIB位图并拷贝所得图像。

5、整理所得图像,对实验结果进行分析。

五、实验结果和分析(a)ShowDIB 位图 (b )ShowDDB 位图 六、思考题1、DDB 和DIB 位图的显示有什么不同?设备相关位图DDB 依赖于具体设备,加入了程序资源,一般以资源文件的形式存储;设备无关位图DIB 不依赖于具体设备,没有任何程序资源,可以永久性的存放在电脑硬盘里,可任意打开硬盘上一幅位图。

医学图像处理实验报告班级 专业 生物医学工程 姓名 学号实验二 用Vc++实现医学图像的线性灰度变换一、实验目的(1)了解VC++在医学图像处理中的应用。

(2)熟悉用VC++进行医学图像线性灰度变换的编程方法。

二、实验设备 微机。

三、实验内容(1)应用VC++进行医学图像的线性灰度变换。

四、实验步骤1、开启VC++6.0,在菜单中选中File 单击鼠标左键,在下拉菜单中选中Open Workspce 单击鼠标左键,在打开的对话框中,根据路径:D:\WorkSpace\MedicalImageProcessingDLL\ MedicalImageProcessingDLL.dsw 打开工作空间。

2、在打开的VC 工作空间中首先找到类XH_MedicalImageProcessing,然后,在类中找到函数ImgLineTransferGray 。

第6讲利用CDC实现绘图程序

第6讲利用CDC实现绘图程序
CClientDC类只能在客户区绘图。所谓客户区是指窗口区 域中去掉边框、标题栏、菜单栏、工具栏、状态栏等以外的 部分,它是用户可以操作的区域。例如打开Word文档将是将 某个.doc文件显示在其客户区域中。在使用CClientDC进行绘 图时,一般要调用GetClientRect函数来获取客户区域的大小。
6.1.1续
应用程序使用GDI可以对三种类型的图形进行操作: 文本操作、矢量图形操作和光栅图形操作(图像操作)。 (1)文本操作是以逻辑坐标为单位来计算文本的输出位置, 用户可以通过各种GDI函数来作出具有各种效果的文本。 (2)矢量图形指的是利用画点、直线、曲线(折线、贝塞 尔曲线等)、多边形、扇形、矩形等函数所绘制的图形。 (3)光栅图形操作是指以光栅图形函数对以位图形式存储 的数据进行操作,它包括各种位图和图标的输出,其在屏 幕上表现为对若干个行和列的像素操作。光栅图形操作是 直接从内存到显存的拷贝操作,其缺点是需要额外的内存 空间,优点是操作速度快。
从MFC示例开始
利用类向导,生成一个名为MfcExam的标准MFC多文档工程
类视图
资源视图
文件视图
视图区,也叫客户区,对应的类是CMfcExamView,所有有 关视图区的显示,都是在CMfcExamView中的 OnDraw 函数 中完成
6.1 图形绘制的基本知识
6.1.1 图形操作的接口——GDI 6.1.2 图形操作有关的CDC类 6.1.3 CDC的内容
SetBkColor(RGB(255,0,0);
6.2.2续1
2.控制文本的背景色
在设备描述表中有两项可以影响背景,一个是背景色,另 一个是背景模式。背景模式可以为透明的(Transparent)或 不透明的(Opaque),缺省为不透明的。当背景模式为不透 明时,按背景颜色的值填充字符的空余部分,如果背景模式 为透明的,将不用背景颜色填充,保留屏幕上原来的颜色。 背景模式可用函数SetBkMode来设置,它设置当前的背景模 式并返回原来的背景模式,该函数的原型为:

与设备无关的位图

与设备无关的位图

与设备无关的位图与设备无关的位图涛儿软件工作室整理编译在上一章我们了解到Windows GDI位图对象(也称为与设备相关的位图,或DDB)有许多程序设计用途。

但是我并没有展示把这些位图储存到磁盘文件或把它们加载内存的方法。

这是以前在Windows中使用的方法,现在根本不用了。

因为位图的位格式相当依赖于设备,所以DDB不适用于图像交换。

DDB内没有色彩对照表来指定位图的位与色彩之间的联系。

DDB只有在Windows开机到关机的生命期内被建立和清除时才有意义。

在Windows 3.0中发表了与设备无关的位图(DIB),提供了适用于交换的图像文件格式。

正如您所知的,像.GIF 或.JPEG之类的其它图像文件格式在Internet上比DIB文件更常见。

这主要是因为.GIF和.JPEG格式进行了压缩,明显地减少了下载的时间。

尽管有一个用于DIB的压缩方案,但极少使用。

DIB内的位图几乎都没有被压缩。

如果您想在程序中操作位图,这实际上是一个优点。

DIB不像.GIF和.JPEG文件,Windows API直接支持DIB。

如果在内存中有DIB,您就可以提供指向该DIB的指标作为某些函数的参数,来显示DIB或把DIB转化为DDB。

DIB 文件格式有意思的是,DIB格式并不是源自于Windows。

它首先定义在OS/2的1.1版中,该操作系统最初由IBM和Microsoft在八十年代中期开始开发。

OS/2 1.1在1988年发布,并且是第一个包含了类似Windows的图形使用者接口的OS/2版本,该图形使用者接口被称之为「Presentation Manager(PM)」。

「Presentation Manager」包含了定义位图格式的「图形程序接口」(GPI)。

然后在Windows 3.0中(发布于1990)使用了OS/2位图格式,这时称之为DIB。

Windows 3.0也包含了原始DIB格式的变体,并在Windows下成为标准。

BMP是什么格式?BMP文件特点及打开方式

BMP是什么格式?BMP文件特点及打开方式

BMP是一种位图文件格式,也叫做设备无关位图格式(DIB),是由微软公司开发的一种图片文件格式。

BMP格式文件保存了每个像素点的RGB值,图像保留了细节和颜色信息,但是会占用较大的存储空间,不利于网络传输和储存。

BMP格式通常用于Windows系统中的图标、位图等图形文件的存储。

BMP格式的特点1. BMP格式采用无损压缩算法,保存了每个像素点的颜色信息,通过像素点映射可以对图像还原出非常精细的细节信息。

2. BMP格式支持多种颜色模式,能够处理24位色、16位色、8位色以及黑白两种颜色模式的图像。

3. BMP格式文件由于保存了每个像素点的信息,所以文件较大,在存储和传输时会占用较大的带宽和存储空间。

4. BMP格式文件结构比较简单,只需要保存每个像素点的信息、文件头和文件信息头即可,因此可以被多种不同类型的应用程序轻松支持和读取。

BMP格式是一种可靠、简单、易于编辑和处理的文件格式,但同时也具有文件大小较大的缺点。

BMP格式的优点1. BMP格式采用无损压缩算法,保存了每个像素点的颜色信息,保证了图像的质量,不损失像素的信息,更为精细得显示图像。

2. BMP格式保存的图像具有较高的色彩深度,可以保存具有更加丰富色彩的图像,更能满足高质量图片的需求。

3. BMP格式简单明了,存储图像时方便读写。

其文件结构非常简单,只需要保存每个像素点的信息、文件头和文件信息头即可,因此可以被多种不同类型的应用程序轻松支持和读取。

4. BMP格式被广泛应用于各种不同的平台和设备,特别是在Windows系统里经常使用。

无论是应用于基于Windows的PC机还是嵌入式应用在诸如ATM机端等各类设备,BMP格式都有着良好的兼容性与共通性。

综上所述,BMP格式具有不受损图像质量、高色深图像存储、简单明了以及广泛适用等优点,使得BMP格式被广泛应用于各类应用场景中。

BMP格式的缺点1. BMP格式文件通常比其他格式的图片文件要大,这意味着它对存储空间和网络传输会带来额外的负担。

【Windows编程】系列第五篇:GDI图形绘制

【Windows编程】系列第五篇:GDI图形绘制

【Windows编程】系列第五篇:GDI图形绘制上两篇我们学习了以及,知道如何⽤常见Win32输出⽂本字符串,这⼀篇我们来学习Windows编程中另⼀个⾮常重要的部分GDI图形绘图。

Windows的GDI函数包含数百个API可供我们使⽤,本篇把最常⽤的GDI绘图做⼀个讲解。

GDI可以绘制点、直线曲线、填充封闭区域、位图以及⽂本,其中⽂本部分已经在上⼀篇中将了,请参考。

跟前⾯的GDI对象⼀样,本篇的这些绘图函数也必须要设备上下⽂句柄(HDC)作为函数参数,从前⽂我们知道,HDC可以在处理WM_PAINT的时候⽤BeginPaint函数获取,也可以从GetDC、GetWindowDC拿到。

既然是画图,就少不了颜⾊的描述,Windows中的颜⾊有⼏种表⽰,其中COLORREF在GDI绘制中⽤的最多,它实际上是⼀个⽆符号32为整型。

其中红、绿、蓝各占⼀个字节,最⾼字节不使⽤,如下图所⽰:该值可以⽤Windows提供的RGB宏来⽣成,Windows中RGB的定义为:#define RGB(r,g,b) ((COLORREF)(((BYTE)(r)|((WORD)((BYTE)(g))<<8))|(((DWORD)(BYTE)(b))<<16)))除此之外,Windows还有结构体RGBQUAD也表⽰颜⾊,这种⼀般⽤于位图结构信息中。

画像素点Windows提供了SetPixel和GetPixel函数来设定和获取像素点的颜⾊。

函数原型为:COLORREF SetPixel(HDC hdc, int X, int Y, COLORREF crColor);COLORREF GetPixel(HDC hdc, int nXPos, int nYPos);该函数并不常使⽤。

画笔画刷在图形绘制之前,可以创建画笔给后续的画图使⽤,创建画笔的API函数为:HPEN CreatePen(int fnPenStyle, int nWidth, COLORREF crColor);HBRUSH CreateSolidBrush(COLORREF crColor);HBRUSH CreatePatternBrush(HBITMAP hbmp);HBRUSH CreateHatchBrush(int fnStyle, COLORREF clrref);它可以指定画笔风格,宽度和颜⾊。

BMP图像数据格式详解

BMP图像数据格式详解

BMP图像数据格式详解⼀.简介BMP(Bitmap-File)图形⽂件是Windows采⽤的图形⽂件格式,在Windows环境下运⾏的所有图象处理软件都⽀持BMP图象⽂件格式。

Windows系统内部各图像绘制操作都是以BMP为基础的。

Windows 3.0以前的BMP图⽂件格式与显⽰设备有关,因此把这种BMP图象⽂件格式称为设备相关位图DDB(device-dependent bitmap)⽂件格式。

Windows 3.0以后的BMP图象⽂件与显⽰设备⽆关,因此把这种BMP图象⽂件格式称为设备⽆关位图DIB(device-independent bitmap)格式(注:Windows 3.0以后,在系统中仍然存在DDB位图,象BitBlt()这种函数就是基于DDB位图的,只不过如果你想将图像以BMP格式保存到磁盘⽂件中时,微软极⼒推荐你以DIB格式保存),⽬的是为了让Windows能够在任何类型的显⽰设备上显⽰所存储的图象。

BMP位图⽂件默认的⽂件扩展名是BMP或者bmp(有时它也会以.DIB或.RLE作扩展名)。

⼆.BMP格式结构BMP⽂件的数据按照从⽂件头开始的先后顺序分为四个部分:◆位图⽂件头(bmp file header):提供⽂件的格式、⼤⼩等信息◆位图信息头(bitmap information):提供图像数据的尺⼨、位平⾯数、压缩⽅式、颜⾊索引等信息◆调⾊板(color palette):可选,如使⽤索引来表⽰图像,调⾊板就是索引与其对应的颜⾊的映射表◆位图数据(bitmap data):图像数据区BMP图⽚⽂件数据表如下:数据段名称⼤⼩(byte)开始地址结束地址位图⽂件头(bitmap-file header)140000h000Dh40000Eh0035h位图信息头(bitmap-informationheader)调⾊板(color table)由biBitCount决定0036h未知图⽚点阵数据(bitmap data)由图⽚⼤⼩和颜⾊定未知未知三.BMP⽂件头BMP⽂件头结构体定义如下:typedef struct tagBITMAPFILEHEADER{UINT16 bfType; //2Bytes,必须为"BM",即0x424D 才是Windows位图⽂件DWORD bfSize; //4Bytes,整个BMP⽂件的⼤⼩UINT16 bfReserved1; //2Bytes,保留,为0UINT16 bfReserved2; //2Bytes,保留,为0DWORD bfOffBits; //4Bytes,⽂件起始位置到图像像素数据的字节偏移量} BITMAPFILEHEADER;BMP⽂件头数据表如下:变量名地址偏移⼤⼩作⽤说明bfType0000h2Bytes⽂件标识符,必须为"BM",即0x424D 才是Windows位图⽂件‘BM’:Windows 3.1x, 95, NT,…  ‘BA’:OS/2 Bitmap Array  ‘CI’:OS/2 Color Icon ‘CP’:OS/2 Color Pointer ‘IC’:OS/2 Icon ‘PT’:OS/2 Pointer因为OS/2系统并没有被普及开,所以在编程时,你只需判断第⼀个标识“BM”就⾏bfSize0002h4Bytes整个BMP⽂件的⼤⼩(以位B为单位)bfReserved10006h2Bytes保留,必须设置为0bfReserved20008h2Bytes保留,必须设置为0bfReserved20008h2Bytes0bfOffBits000Ah4Bytes0000h开始到图像像素Bytes为四.BMP信息头BMP信息头结构体定义如下:typedef struct _tagBMP_INFOHEADER{DWORD biSize; //4Bytes,INFOHEADER结构体⼤⼩,存在其他版本I NFOHEADER,⽤作区分LONG biWidth; //4Bytes,图像宽度(以像素为单位)LONG biHeight; //4Bytes,图像⾼度,+:图像存储顺序为Bottom2Top,-:Top2Bottom WORD biPlanes; //2Bytes,图像数据平⾯,BMP存储RGB数据,因此总为1WORD biBitCount; //2Bytes,图像像素位数DWORD biCompression; //4Bytes,0:不压缩,1:RLE8,2:RLE4DWORD biSizeImage; //4Bytes,4字节对齐的图像数据⼤⼩LONG biXPelsPerMeter; //4 Bytes,⽤象素/⽶表⽰的⽔平分辨率LONG biYPelsPerMeter; //4 Bytes,⽤象素/⽶表⽰的垂直分辨率DWORD biClrUsed; //4 Bytes,实际使⽤的调⾊板索引数,0:使⽤所有的调⾊板索引DWORD biClrImportant; //4 Bytes,重要的调⾊板索引数,0:所有的调⾊板索引都重要}BMP_INFOHEADER;BMP信息头数据表如下:变量名地址偏移⼤⼩作⽤说明biSize000Eh4Bytes BNP信息头即BMP_INFOHEADER结构体所需要的字节数(以字节为单位)biWidth0012h4Bytes说明图像的宽度(以像素为单位)biHeight0016h4Bytes说明图像的⾼度(以像素为单位)。

(适合初学者)MFC基础教程

(适合初学者)MFC基础教程

(适合初学者)MFC基础教程Visual C++/MFC初学教程目录+-- 第一章 VC入门|------ 1.1 如何学好VC|------ 1.2 理解Windows消息机制|------ 1.3 利用Visual C++/MFC开发Windows 程序的优势|------ 1.4 利用MFC进行开发的通用方法介绍|------ 1.5 MFC中常用类,宏,函数介绍+-- 第二章图形输出|------ 2.1 和GUI有关的各种对象|------ 2.2 在窗口中输出文字|------ 2.3 使用点,刷子,笔进行绘图|------ 2.4 在窗口中绘制设备相关位图,图标,设备无关位图|------ 2.5 使用各种映射方式|------ 2.6 多边形和剪贴区域+-- 第三章文档视结构|------ 3.1|------ 4.F 关于WM_NOTIFY的使用方法+-- 第五章对话框|------ 5.1 使用资源编辑器编辑对话框|------ 5.2 创建有模式对话框|------ 5.3 创建无模式对话框|------ 5.4 在对话框中进行消息映射|------ 5.5 在对话框中进行数据交换和数据检查|------ 5.6 使用属性对话框|------ 5.7 使用通用对话框|------ 5.8 建立以对话框为基础的应用|------ 5.9 使用对话框作为子窗口+-- 第六章网络通信开发|------ 6.1 WinSock介绍|------ 6.2 利用WinSock进行无连接的通信+------ 6.3 利用WinSock建立有连接的通信1.1 如何学好VC这个问题很多朋友都问过我,当然流汗是必须的,但同时如果按照某种思路进行有计划的学习就会起到更好的效果。

万事开头难,为了帮助朋友们更快的掌握VC开发,下面我将自己的一点体会讲一下:1、需要有好的C/C++基础。

正所谓“磨刀不误砍柴工”,最开始接触VC时不要急于开始Windows程序开发,而是应该进行一些字符界面程序的编写。

基于Linux的MiniGUI线程动画编程方法

基于Linux的MiniGUI线程动画编程方法

基于Linux的MiniGUI线程动画编程方法摘要:本文提出了在MiniGUI平台中使用Linux线程技术进行动画编程的基本实现方法。

通过该方法可以使多个个体按照各自的运动规律在显示屏上自由移动,从而实现基本的动画效果。

本文为基于嵌入式Linux平台的游戏动画、动态模拟等应用领域提供了切实可行的实现思路和方法。

关键词:MiniGUI 线程动画0 引言在本世纪初,嵌入式系统应用技术得到了飞速发展。

在工业控制、医疗设备军事、智能家电、娱乐设备等领域都可以看到嵌入式系统的影子。

随着电子计算技术和制造技术的快速发展,各种集成可视化图形操作界面的嵌入式设备更是层出不穷,大大增强了嵌入式系统的使用性能。

本文介绍的是在MiniGUI平台上使用Linux提供的多线程技术进行动画编程的基本实现方法,这为需要实现动画界面的手机游戏、MP4播放器等嵌入式娱乐设备提供了切实可行的实现思路和编程方法。

因此本文具有较高的使用价值和应用前景。

1 MiniGUI简介MiniGUI是一款轻量级嵌入式图形系统(GUI),由北京飞漫软件技术有限公司研发和发布。

MiniGUI具有体积小、运行效率高、可配置、移植性好的优点。

MiniGUI具有完善的窗口机制和稳定的消息驱动机制。

为了更好得适应复杂的嵌入式系统应用环境,MiniGUI提供了Threads、Processes、MiniGUI-Standalone三种运行模式。

这三种模式分别适用于普通多任务嵌入式操作系统、具有完整桌面操作系统特性的嵌入式操作系统、单任务操作系统应用环境。

目前,MiniGUI已经被广泛应用于工业医疗控制、仪器仪表、消费电子、通讯设备等领域。

MiniGUI提供了功能强大的图形设备接口GDI,用以在显示屏上进行各种图形图像和文本文字的输出。

GDI有力地支持了基于嵌入式平台的图形图像界面编程。

2 Linux多线程机制介绍在多任务操作系统中,进程是最小的资源分配单位。

也就是说,每个进程所占用的资源空间是独立的。

与设备无关的位图

与设备无关的位图

与设备无关的位图(DIB)DIB(Device-indepentent bitmap)的与设备无关性主要体现在以下两个方面:DIB的颜色模式与设备无关。

例如,一个256色的DIB即可以在真彩色显示模式下使用,也可以在16色模式下使用。

256色以下(包括256色)的DIB拥有自己的颜色表,像素的颜色独立于系统调色板。

由于DIB不依赖于具体设备,因此可以用来永久性地保存图象。

DIB一般是以*.BMP文件的形式保存在磁盘中的,有时也会保存在*.DIB文件中。

运行在不同输出设备下的应用程序可以通过DIB来交换图象。

DIB还可以用一种RLE算法来压缩图像数据,但一般来说DIB是不压缩的。

11.4.1 DIB的结构与Borland C++下的框架类库OWL不同,MFC未提供现成的类来封装DIB。

尽管Microsoft 列出了一些理由,但没有DIB类确实给MFC用户带来很多不便。

用户要想使用DIB,首先应该了解DIB的结构。

在内存中,一个完整的DIB由两部分组成:一个BITMAPINFO结构和一个存储像素阵列的数组。

BITMAPINFO描述了位图的大小,颜色模式和调色板等各种属性,其定义为typedef struct tagBITMAPINFO {BITMAPINFOHEADER bmiHeader;RGBQUAD bmiColors[1]; //颜色表} BITMAPINFO;RGBQUAD结构用来描述颜色,其定义为typedef struct tagRGBQUAD {BYTE rgbBlue; //蓝色的强度BYTE rgbGreen; //绿色的强度BYTE rgbRed; //红色的强度BYTE rgbReserved; //保留字节,为0} RGBQUAD;注意,RGBQUAD结构中的颜色顺序是BGR,而不是平常的RGB。

BITMAPINFOHEADER结构包含了DIB的各种信息,其定义为typedef struct tagBITMAPINFOHEADER{DWORD biSize; //该结构的大小LONG biWidth; //位图的宽度(以像素为单位)LONG biHeight; //位图的高度(以像素为单位)WORD biPlanes; //必须为1WORD biBitCount //每个像素的位数(1、4、8、16、24或32)DWORD biCompression; //压缩方式,一般为0或BI_RGB (未压缩)DWORD biSizeImage; //以字节为单位的图象大小(仅用于压缩位图)LONG biXPelsPerMeter; //以目标设备每米的像素数来说明位图的水平分辨率LONG biYPelsPerMeter; //以目标设备每米的像素数来说明位图的垂直分辨率DWORD biClrUsed; /*颜色表的颜色数,若为0则位图使用由biBitCount指定的最大颜色数*/ DWORD biClrImportant; //重要颜色的数目,若该值为0则所有颜色都重要} BITMAPINFOHEADER;与DDB不同,DIB的字节数组是从图象的最下面一行开始的逐行向上存储的,也即等于把图象倒过来然后在逐行扫描。

Windows环境下与设备无关位图的显示技术

Windows环境下与设备无关位图的显示技术

Windows环境下与设备无关位图的显示技术
陶新健
【期刊名称】《电脑编程技巧与维护》
【年(卷),期】1996(000)008
【摘要】设备相关的位图的缺点是在一种设备产生的位图,在另一种设备上显示时常常会出问题。

设备无关的位图可在很大程度上解决这一问题。

一般参考中介绍的方法很简略,令人很难掌握;有的参考书介绍了详细的方法并给出原码。

但按照其原码输入的程序却无法可靠的显示设备无关位图,本文介绍了一种在Windows环境下设备无关位图的可靠显示方法。

【总页数】4页(P27-30)
【作者】陶新健
【作者单位】无
【正文语种】中文
【中图分类】TP316
【相关文献】
1.由设备无关点位图文件生成内存点位图 [J], 张凤声
2.Windows
3.0下将内存中点位图存于与设备无关点位图文件 [J], 张凤声
3.怎样在WINDOWS环境下显示位图 [J], 高强
4.Windows 3.0下将内存中点位图存于与设备无关点位图的文件 [J], 张风声
5.Windows环境下用位图显示点阵汉字 [J], 刘启文;贺聿志;詹建桥
因版权原因,仅展示原文概要,查看原文内容请购买。

由设备无关点位图文件生成内存点位图

由设备无关点位图文件生成内存点位图

,
在读 取 过 程 中将数 据 分 两 部 分 存 放
!∀ #
,
一 和
部分 为点 位图 的
两 个 子 结构

,
它 又 包 含 有

另 一 部 分 是 位数 组

然后 用
,
函 数 将 读入 的 两 因 为 进 行 显 示时 才 进
部 分数 据 做为 其 中 二 个 参数 送 到 输 出 设 备 上
行 位 模 式转 换 第 三种 方 法 是 将 上 述 两 种方 法 结 合 起 来

卷 第 期 年

河 北 大 学 学 报 自然 科 学 版

教 学研 究

由设 备 无 关 点 位 图文 件 生 成 内存 点 位 图
张凤 声
摘要
存点 位图
,
数学 系
,
本 文主 要讨论在
环境 下 点位 图句柄
将 设 备 无 关 点 位 图 文 件 读 到 内存 中 并 生 成 内

返回 其句柄
,
用 此 句柄 即 可 显 示 或 打 印 此 位 图
n
t
t
h
e
b
i
t
a m
P
e K
y
w
o
r d
s D I
B
b
i
t
a m
P
a H
n d l
e b i m
a
P
r
e
s
o
u
r
c
e
责 任 编辑
陈燕
i f
(
! h
B
i t
e ) M
s
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2.4 在窗口中绘制设备相关位图,图标,设备无关位图
在Windows中可以将预先准备好的图像复制到显示区域中,这种内存拷贝执行起来是非常快的。

在Windows中提供了两种使用图形拷贝的方法:通过设备相关位图(DDB)和设备无关位图(DIB)。

DDB可以用MFC中的CBitmap来表示,而DDB一般是存储在资源文件中,在加载时只需要通过资源ID号就可以将图形装入。

BOOL CBitmap::LoadBitmap( UINT nIDResource )可以装入指定DDB,但是在绘制时必须借助另一个和当前绘图DC兼容的内存DC来进行。

通过CDC::BitBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop )绘制图形,同时指定光栅操作的类型。

BitBlt可以将源DC中位图复制到目的DC中,其中前四个参数为目的区域的坐标,接下来是源DC指针,然后是源DC 中的起始坐标,由于BitBlt为等比例复制,所以不需要再次指定长宽,(StretchBlt可以进行缩放)最后一个参数为光栅操作的类型,可取以下值:
∙BLACKNESS输出区域为黑色 Turns all output black.
∙DSTINVERT反色输出区域 Inverts the destination bitmap.
∙MERGECOPY在源和目的间使用AND操作 Combines the pattern and the source bitmap using the Boolean AND operator.
∙MERGEPAINT在反色后的目的和源间使用OR操作 Combines the inverted source bitmap with the destination bitmap using the Boolean OR operator.
∙NOTSRCCOPY将反色后的源拷贝到目的区 Copies the inverted source bitmap to the destination.
∙PATINVERT源和目的间进行XOR操作 Combines the destination bitmap with the pattern using the Boolean XOR operator.
∙SRCAND源和目的间进行AND操作 Combines pixels of the destination and source bitmaps using the Boolean AND operator.
∙SRCCOPY复制源到目的区 Copies the source bitmap to the destination bitmap.
∙SRCINVERT源和目的间进行XOR操作 Combines pixels of the destination and source bitmaps using the Boolean XOR operator.
∙SRCPAINT源和目的间进行OR操作 Combines pixels of the destination and source bitmaps using the Boolean OR operator.
WHITENESS输出区域为白色 Turns all output white.
下面用代码演示这种方法:
CYourView::OnDraw(CDC* pDC)
{
CDC memDC;//定义一个兼容DC
memDC.CreateCompatibleDC(pDC);//创建DC
CBitmap bmpDraw;
bmpDraw.LoadBitmap(ID_BMP) ;//装入DDB
CBitmap* pbmpOld=memDC.SelectObject(&bmpDraw) ;
//保存原有DDB,并选入新DDB入DC
pDC->BitBlt(0,0,20,20,&memDC,0,0,SRCCOPY) ;
//将源DC中(0,0,20,20)复制到目的DC(0,0,20,20)
pDC->BitBlt(20,20,40,40,&memDC,0,0,SRCAND);
//将源DC中(0,0,20,20)和目的DC(20,20,40,40)中区域进行AND操作memDC.SelectObject(pbmpOld) ;//选入原DDB
}
(图标并不是一个GDI对象,所以不需要选入DC)在MFC中没有一个专门的图标类,因为图标的操作比较简单,使用HICON CWinApp::LoadIcon( UINT nIDResource )或是HICON CWinApp::LoadStandardIcon( LPCTSTR lpszIconName ) 装入后就可以利用BOOL CDC::DrawIcon( int x, int y, HICON hIcon )绘制。

由于在图标中可以指定透明区域,所以在某些需要使用非规则图形而且面积不大的时候使用图标会比较简单。

下面给出简单的代码:
OnDraw(CDC* pDC)
{
HICON hIcon1=AfxGetApp()->LoadIcon(IDI_I1);
HICON hIcon2=AfxGetApp()->LoadIcon(IDI_I2);
pDC->DrawIcon(0,0,hIcon1);
pDC->DrawIcon(0,40,hIcon2);
DestroyIcon(hIcon1);
DestroyIcon(hIcon2);
}
同样在MFC也没有提供一个DIB的类,所以在使用DIB位图时我们需要自己读取位图文件中的头信息,并读入数据,并利用API函数StretchDIBits绘制。

位图文件以BITMAPFILEHEADER结构开始,然后是BITMAPINFOHEADER结构和调色版信息和数据,其实位图格式是图形格式中最简单的一种,而且也是Windows可以理解的一种。

我不详细讲解DIB位图的结构,提供一个CDib类供大家使用,这个类包含了基本的功能如:
Load,Save,Draw。

DownLoad CDib 4K
《Visual C++开发指南》闻怡洋/文﹣相关报道。

相关文档
最新文档