用VC_6_0实现图像多种功能打印

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

辽宁大学学报

自然科学版

第27卷 第4期 2000年JOU RNAL OF LIAONI NG U NIVER SITY Natural Sciences Edition

Vol.27 No.4 2000

用VC 6.0实现图像多种功能打印

林丽清

(沈阳工业学院北区,电子系沈阳110045)

摘 要:在VC 6.0环境中,实现大图像的多种功能打印.

关键词:VC 6.0;图像多种功能打印;映射模式;设备场景.

中图分类号:TP391 文献标识码:A 文章编号:1000 5846(2000)04 0316 03

1 功能与需求简介

Windows的所有绘图指令,都集中在GDI模块函数中,图形输出到什么地方,取决于DC,它可以是显示屏DC,也可以是打印机DC.VC 开发环境缺省提供的打印仅将屏幕显示按像素输出到打印机,不考虑打印机与屏幕分辨率,因而不能满足某些实际需求,如打印出来的图像可能不是所需大小,不能进行分页和页边距设置,等等.笔者在VC 6.0开发图像处理系统的图像打印部分时,实现了图像多种功能打印,包括:

(1).大图像的多页分块打印,以及为了重新拼接打印后图像而设置的重叠边的实现.

(2).按打印纸大小来缩放图像的全打印纸缩放打印,用户可指定横纵比例允许失真和不允许失真.

(3).图像上指定区域的裁剪打印.

(4).在打印时页边距的实现.

(5).打印时用户可以指定相对屏幕当前图像尺寸的缩放比例.

强调一点,本功能采用的实现方法完全适用于复合文档的打印,可将OLE对象和图像一并打印出来,这在需要对大图像作诸如标注、文字标识、图形标识、图像评分、物体识别等等操作,而将各种标识对象以OLE对象形式嵌入时,可以很好地实现将各种标识操作对象一并打印出来.

2 实现分析

Windows的图形装置界面(GDI)完全与硬件无关,用户绘图是绘制在设备场景DC上,相同的绘图动作如果送到 显示屏幕DC,就是在屏幕上绘图,如果送到 打印机DC,就是在打印机上绘图.用户要修改设备场景的映射模式(Mapping Mode)和窗口与视口的映

收稿日期:2000 06 23

作者简介:林丽清(1971 ),女,沈阳人,助教,从事计算机工作

射比例来控制打印出来的图像大小,完成图像按缩放比例打印功能.同时,要实现大图像分页打印,要在绘制每页之前调整视口原点以调整绘制区域.

分析预设的打印机制,可知VC 应用程序中,提供了的几个函数的空壳:OnBegin Printing()函数可用于需要分页时在此函数中计算并设置好需要分的页数;OnPre pareDC()函数框架每次显示输出动作之前,系统都会调用它,用户可以在这里进行窗口范围和视口范围以及映射比例等设备场景的设置.另外,要实现每次打印时不同区域的打印,就要在此函数中添加代码.计算并设置绘制时的视口坐标;OnPreparePrinting ()函数;OnPrint()函数用于真正绘制动作.

3 实现方法

在用VC 环境生成应用程序框架,以及屏幕图像显示加工后,分别进行如下打印实现:

(1).首先在OnBeginPrinting()中计算大图像的多页分块打印时所分的页数:

用pDC->GetDeviceCaps()函数求出打印纸像素尺寸(iPixey,iPixex)

求出打印机逻辑英寸点数与显示器逻辑英寸点数比,以计算实际使用的放大比例及图像像素尺寸iWide x,iHighy,由于分页时对迭边的考虑从中去掉横向和纵向的迭边.同时从实际打印纸大小中去掉以像素单位的页边距尺寸和迭边尺寸计算总打印页数:

iPa geX=(int)iWidex/xPage+(iWidex>xPage*(int)(iWidex/xPage));

iPa geY=(int)i H ighy/yPage+(i H ighy>yPage*(int)(iHighy/yPage));

设置打印信息pInfo->SetMinPa ge(1);pInfo->SetMaxPa ge(iPage)

(2).在OnPrepareDC()中设置打印操作的映射模式,映射比例,在分多页打印时设置每一印页的视口坐标.首先设置映射模式为任意比例pDC ->SetMapMode (MM ANISOTROPIC);然后设置窗口范围;计算当前屏幕显示的图像尺寸Size,以及pDC->SetWindowExt(size).设置视口范围,以实现映射比例,多页打印时设置视口范围为用户指定的打印图像大小,并设置窗口原点为(0,0);单页缩放打印视口范围在允许失真时,设为打印纸区域尺寸;不允许失真时,设为按横纵比例的较小值求得的打印区域尺寸.设置单页打印时的视口原点为打印区域起点.由pInfo->m nCurPage 求当前页对应的行号,列号;计算和设置多页打印时每页视口原点pDC->SetVie wportOrg();

(3).OnPrepare Printing()函数.

!if(!COle Doc ObjectItem ∀OnPreparePrinting(this,pInfo))

!return FALSE;!将框架提供的这两行注释掉

(4).OnPrint()函数.当框架调用了OnPrepareDC()函数进行了映射比例和视口原点的设置之后,将执行OnPrint()函数来进行显示或打印动作.

首先调用OnDra w()函数画出图像,然后将画在打印用户设置的页边距范围内的部分除去.求出用户指定的页边距所形成的四个边距部分矩形,并用pDC->DptoLP()转换为逻辑坐标,这部分,逻辑坐标和设备坐标的区分至关重要,利用设备坐标容易求得边距矩形,而FillRec t()函数所用参数为逻辑坐标,所以要用pDC->DptoLP()转换之后用白色画317

林丽清:用VC 6.0实现图像多种功能打印

相关文档
最新文档