作者:朱金灿


一. 前言


最近因为工作需要,也因为自己的兴趣,决心好好研究一下图形图像的显示。图形图像显示,既可以说是一个古老的研究课题,也可以说是一个年轻的课题。说它老,或许它可以和计算机的历史一样长。说它年轻,和很多老课题一样,随着多线程、 GPU 等新技术的诞生又焕发了新的面貌。


      闲话少说,言归正传。在这次研究中,我初步计划是:首先研究大图像的快速显示,包括在 GDI 、 GDI+ 、 OpenGL 环境下漫游、放大、缩小和拖动等等以及效率测试、双缓冲绘图等等;其次是大图像的金字塔算法;三是矢量图形的快速显示;四是新技术在图形图像显示方面的应用,具体方法是下载资料和源码,看资料和源码。



二. 简单的位图显示


事实上进行简单的位图显示是一件很简单的事情。只需要在视图类的 OnDraw 函数加入下面的代码:



void CShowBmpView::OnDraw(CDC* pDC)
{
CShowBmpDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
if(m_AllowShowBmp) //假如允许显示bmp图片
{
CBitmap bitmap; //定义一个位图类变量
/*从文件中装入位图*/
HBITMAP chbitmap = (HBITMAP)LoadImage(
NULL, //如果从资源加载,则指明包含位图资源的程序实例句柄
m_FilePath,//位图文件路径(含文件名)
IMAGE_BITMAP,//加载的图像类型为位图
0,0, //宽度和高度,0表示使用默认值
LR_LOADFROMFILE); //加载标志,表明从文件加载
bitmap.Attach(chbitmap);
/*创建一个兼容DC*/
CDC dcComp;
dcComp.CreateCompatibleDC(pDC);
/*将位图选入兼容DC中*/
dcComp.SelectObject(&bitmap);
BITMAP bminfo; //定义位图信息结构体变量
bitmap.GetObject(sizeof(bminfo),&bminfo);//取得位图信息
pDC->BitBlt(
0,0, //显示位置
bminfo.bmWidth,bminfo.bmHeight,//显示位图的宽度和高度
&dcComp, //位图所在的兼容DC
0,0, //兼容DC中的位置
SRCCOPY); //显示方式,表示直接复制
}


  未完待续!