你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 图形图象处理与游戏编程
利用GDI函数减轻图像缩放失真(六)
 

函数BOOL Draw( CDC *pDC, bool m_gdi_draw=true,int nX=0, int nY=0, int nWidth=-1, int nHeight=-1 )实现位图显示。为了说明利用GDI函数设计的图像缩放函数优于直接使用StretchDIBitsDraw函数实现了两种图像缩放显示方式,如果m_gdi_drawtrue,表示采用GDI设计的缩放函数显示;如果为false,则表示直接使用StretchDIBits显示。参数中的(nX, nY)表示绘制位图的开始位置偏离屏幕左上角的距离,nWidthnHeight分别表示图像显示的宽度和高度,函数的具体代码如下:

BOOL  CMyBitmap::Draw( CDC *pDC, bool m_gdi_draw, int nX, int nY, int nWidth, int nHeight )

{

    if( m_PixelBuffer == NULL ) return( FALSE ); //如果没有数据,则不绘制

    SetPalette(pDC); //如果是调色板图像,则选择调色板

    if( nWidth == -1 )  nWidth = DisplayWidth; //如果不指定大小,则以缩放后的大小进行绘制

    if( nHeight == -1 ) nHeight= DisplayHeight;

    if (m_gdi_draw==true) //如果选择GDI方式绘制,则利用显示单元进行绘制

      StretchDIBits(pDC->m_hDC, nX, nY,nWidth, nHeight,0, 0,DisplayWidth, DisplayHeight,DisplayData,lpbmi, BI_RGB, SRCCOPY );

    else  //利用原图像数据进行绘制

      StretchDIBits(pDC->m_hDC, nX, nY,nWidth,nHeight ,0, 0,m_Width, m_Height,m_PixelBuffer,bInfo, BI_RGB, SRCCOPY );

    return TRUE;

}

5  实例设计

利用Visual C++6.0开发工具设计一个基于多文档框架的位图浏览器,实现位图的放大和缩小,以说明缩放函数是有效实用的,具体步骤如下。

5.1 建立多文档框架应用程序

启动VC++后,新建一个“MFC AppWizard(exe)”类型的项目,名为BmpScale。在MFC AppWizard的第一步,选择“Multiple documents”,在最后一步,视图类的类基选择具有滚动条的“CScrollView”。在默认情况下,启动多文档应用程序时将自动新建一个文档,可通过在CBmpScaleAppInitInstance()函数中加入代码cmdInfo.m_nShellCommand=CCommandLineInfo::FileNothing将该功能屏蔽,该代码应在ParseCommandLine(cmdInfo)之后。同时,在上述代码后面加入以下程序
  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089