虚拟打印的实现-EMF转换成BMP
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://fxh7622.blog.51cto.com/63841/50182 |
通过上两次的介绍我们可以得到一个打印任务的EMF文件。有了EMF文件以后再将它转换成BMP、JPG等等的类型就比较容易了。这次我就写一写如何将一个EMF文件转换成一个BMP文件。
在DELPHI中有一个类叫做TMetaFile,可以利用它来将EMF文件转换成BMP文件。具体的实现如下:
function EMFTOBMP(): Boolean;stdcall;export;//将EMF类型转换为BMP文件
var SearchRes : TSearchRec;// 查找文件的结构 nFound, i : Integer; Temp:Tbitmap;
EMF:TMetaFile; reg : TRegistry; m_DestDir:String; m_BmpDestFile:String; DivNum,ModNum:integer; BmpNum,BmpWidth:Integer;//定义BMP的显示位数和显示宽度 JudgeWidth:Integer;//定义BMP图是否限制宽度 begin //初始化BMP文件的宽和显示位数。 BmpNum:=16;
BmpWidth:=832; JudgeWidth:=1; nFound := FindFirst(m_DestDir+'\*.emf', faAnyFile, SearchRes); while nFound = 0 do begin //转换开始将EMF文件装换成BMP文件 EMF:=TMetaFile.Create; Temp:=Tbitmap.Create(); case BmpNum of 1: begin Temp.PixelFormat:=pf1bit; end; 4: begin Temp.PixelFormat:=pf4bit; end; 16: begin Temp.PixelFormat:=pf16bit; end; 24: begin Temp.PixelFormat:=pf24bit; end; 32: begin Temp.PixelFormat:=pf32bit; end; end; try EMF.LoadFromFile(m_DestDir+'\'+SearchRes.Name); if JudgeWidth=0 then begin temp.Width:=emf.Width; end else begin if emf.Width<BmpWidth then begin DivNum:=emf.Width div 32; ModNum:=emf.Width mod 32; if ModNum>16 then begin Inc(DivNum); end; temp.Width:=DivNum * 32; end else begin temp.Width:=BmpWidth; end; end; temp.Height:=emf.Height; temp.Canvas.Draw(0,0,emf); m_BmpDestFile:=Copy(SearchRes.Name,0,strlen(Pchar(SearchRes.Name))-4); temp.SaveToFile(m_DestDir+'\'+m_BmpDestFile+'.bmp'); //删除Emf文件 DeleteFile(m_DestDir+'\'+SearchRes.Name); finally temp.free; emf.free; end; nFound := FindNext(SearchRes); end; FindClose(SearchRes); Result:=true; end; 通过上面的代码我们可以将一个EMF文件转换成一个BMP文件。至于如何转换成JPG、GIF文件网上有很多的代码,大家搜一下就知道了。
到现在为止,一个虚拟打印的编程部分已经完成了。但是如何将这个虚拟打印安装到系统中,让它真正的运行起来呢?下次我将会写关于如何安装这个虚拟打印的方法。
本文出自 “狗窝” 博客,请务必保留此出处http://fxh7622.blog.51cto.com/63841/50182 本文出自 51CTO.COM技术博客 |



fxh7622
博客统计信息
热门文章
最新评论
友情链接