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

m_nCmdShow=SW_SHOWMAXIMIZED”使应用程序启动时最大化窗口显示。字符串资源“IDR_BMPSCATYPE”声明了与应用程序关联的文件类型,将其修改为“\nBMP\nBMP\nBMP(*.bmp)\n.bmp\nBMP.Document\nBMP Document”,说明当前关联文件是后缀名为.bmp的位图。

5.2 在文档类CBmpScaleDoc载入位图

首先在CBmpScaleDoc类声明两个共有变量用于表示位图实例及缩放比例:

CMyBitmap m_Bmp; //位图实例

double m_scale;    //位图缩放比例

通过ClassWizard(快捷键:Ctrl+w)重写CBmpScaleDoc的虚函数OnOpenDocument,具体代码如下:

BOOL CBmpScaleDoc::OnOpenDocument(LPCTSTR lpszPathName)

{

    if (!CDocument::OnOpenDocument(lpszPathName)) return FALSE;

    bool ret=m_Bmp.LoadImg((char *)lpszPathName); //根据文件名读入位图

    m_scale=1.0; //100%比例显示

     if (ret==true) m_Bmp.Zoom(m_scale); //根据缩放比例,显示位图

    return TRUE;

}

5.3为视图类CBmpScaleView添加位图显示代码

先在CBmpScaleView中声明以下变量:

bool m_gdi_draw; // 位图显示是用缩放函数还是直接用StretchDIBits函数,true表示用缩放函数

CString m_title, m_strImgsize; // m_title为文档的标题,strImgsize用来存放图像大小及当前显示比例的字符串

同时在CBmpScaleView的构造函数将m_gdi_draw赋值为true,即默认显示方式为使用缩放函数。然后,改写OnInitialUpdate函数:

void CBmpScaleView::OnInitialUpdate()

{

    CScrollView::OnInitialUpdate();

    CBmpScaleDoc* pDoc = (CBmpScaleDoc *)GetDocument(); //获取文档类指针

    int w = pDoc->m_Bmp.m_Width*pDoc->m_scale; //计算位图显示宽度

    int h = pDoc->m_Bmp.m_Height*pDoc->m_scale; //计算位图显示高度

    CSize sizeTotal(w, h);

    SetScrollSizes(MM_TEXT, sizeTotal); //设置滚动范围

    GetParentFrame()->RecalcLayout();

    ResizeParentToFit();

    m_title=pDoc->GetTitle(); //获取并保存文档标题

}

  推荐精品文章

·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