虚拟打印的实现-EMF转换成BMP
来源:互联网 发布:知乎 百事可乐 无糖 编辑:程序博客网 时间:2024/06/05 15:52
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。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;
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文件的宽和显示位数。
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;
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
- 虚拟打印的实现-EMF转换成BMP
- 虚拟打印的实现-EMF转换成BMP
- 虚拟打印的实现-SPL转换成EMF
- 虚拟打印的实现-SPL转换成EMF
- 关于BMP和EMF的显示问题
- 使用IPicture的OLE实现读取和显示BMP,GIF,JPG,ICO,EMF,WMF图像
- 虚拟打印的实现-安装
- 虚拟打印的实现-安装
- WMF, EMF转换成EMF+来抗锯齿
- 虚拟打印的实现-DDK部分
- 将EMF文件转换成JPG文件
- GDI+实例教程之: 转换Image(BMP,JPG,GIF,PNG等) 到MetaFile(EMF等) 格式
- bmp转换成png的问题
- 应用 RSA 实现 EMF 的开发
- 关于matlab fig格式文件转换成大小合适的emf矢量图格式文件的方法
- 实现图片由 720*480 的bmp 转换成 1920*1080 的 png
- BCB实现BMP图片的RGB分解,BMP与JPG格式的相互转换
- C++Builder中实现BMP,JPG图片格式的转换
- linux删除文件的shell
- 虚拟打印的实现-DDK部分
- svn使用札记
- [网络收集]JS刷新页面总和!多种JS刷新页面代码!
- 虚拟打印的实现-SPL转换成EMF
- 虚拟打印的实现-EMF转换成BMP
- VMWARE上suse linux 10环境: Oracle 10g cluster+asm+rac安装流程
- 虚拟打印的实现-安装
- png 透明的一些问题
- J2EE: Convention 零配置及其在springside3 mini-web中的使用
- 关于C++中STL中vector实现的几道考试题
- ADSP-2106X的浮点数据格式
- 如何才能更加有效率(ZZ)
- link错误__semihosting_swi_guard multiply defined问题