Windows程序设计(2):载入一幅图像并显示

来源:互联网 发布:java架构师书籍知乎 编辑:程序博客网 时间:2024/06/06 11:45

用Matlab载入一张图,再显示,好像非常非常容易…

C语言就完全不一样了。很复杂。

原因很简单,因为Matlab都封装好了嘛,而C语言要把所有的细节都体现出来。

以下代码,也来自网络。注意里面很多的注释……


总之,

1. 首先要获得DC(Device Context),设备环境、设备描述表。差不多描述的就是应用程序的客户区。

通过它,Windows操作系统知道我们希望怎么与设备(显示器)打交道,

操作系统再通过驱动去驱动物理设备和驱动,也许是改变电压电流等等,

让屏幕上做出一些相应的动作,比如显示一张图。

2. 显示的东西,首先要载入内存,不然系统怎么知道要显示的是什么呢?

而内存里的东西,要和屏幕上显示的东西,兼容,所以要在内存里创建一个兼容的DC。

为了显示出某张图,(1)要载入图片,比如,从硬盘上载入一张BMP图片到内存。

(2)把内存中的图片数据(肯定是一堆0101了…),拷贝到在内存中虚拟出的一个虚拟DC(通过CreateCompatibleDC函数),

该虚拟DC兼容真正的DC(在paint消息里,用BeginPaint函数得到)。

(3)通过一个“贴图”的函数(BitBlt),把内存中虚拟出来DC里的图像数据(就是我们希望显示的那幅图),显示到屏幕上。

3. 在步骤2(3)中,为了让屏幕显示,还必须要由操作系统帮助我们显示,于是要通过DC(和驱动,但驱动我们看不见了),

把图片显示出来。



上面是用一个for循环,贴了一堆。

如果只需要贴一张图,还要求这张图在客户区中央显示,可以利用size消息,来获取客户区的大小。
最后,利用客户区的大小和图片大小,算出图片的起点坐标。
代码如下。显示的是一辈子也买不起的Ferrari FF的照片了…



0 0