如何将一EMF图象转换成BMP图象?100分。(100分)

  • 主题发起人 主题发起人 djdsz
  • 开始时间 开始时间
D

djdsz

Unregistered / Unconfirmed
GUEST, unregistred user!
我是这样写的。
var
temp:TImage;
EMF:TMetaFile;
begin
EMF:=TMetaFile.Create;
temp:=TImage.Create(self);
try
EMF.LoadFromFile(filename1)
temp.Width:=emf.Width;
temp.Height:=emf.Height;
temp.Canvas.Draw(0,0,emf);
temp.Picture.Bitmap.SaveToFile(filename2;
finally
temp.free;
emf.free;
end;
end;

觉得很烦,并且图象背景会变化,请高人指点。3KS
 
提前!!
 
提前!!
 
将图象copy到剪贴板后在放到Timage中应该可以实现你的要求。
 
用Assign试试。
 
在TopenDialog设置好filter
比如设置为:
Alle Dateien (*.bw;*.cel;*.icb;*.pcc;*.pcd;*.pcx;*.pic;*.rgb;*.scr;*.tga;*.vda;*.vst;*.win;*.gif;*.tga;*.pcd;*.pcx;*.png;*.jpg;*.jpeg;*.bmp;*.ico;*.emf;*.wmf)|*.bw;*.cel;*.icb;*.pcc;*.pcd;*.pcx;*.pic;*.rgb;*.scr;*.tga;*.vda;*.vst;*.win;*.gif;*.tga;*.pcd;*.pcx;*.png;*.jpg;*.jpeg;*.bmp;*.ico;*.emf;*.wmf|SGI black/white images (*.bw)|*.bw|Autodesk images (*.cel)|*.cel|Truevision images (*.icb)|*.icb|ZSoft PCC images (*.pcc)|*.pcc|Kodak Photo-CD images (*.pcd)|*.pcd|ZSoft PCX images (*.pcx)|*.pcx|Autodesk images (*.pic)|*.pic|SGI true color images (*.rgb)|*.rgb|Word 5.x screen capture images (*.scr)|*.scr|Truevision images (*.tga)|*.tga|Truevision images (*.vda)|*.vda|Truevision images (*.vst)|*.vst|Truevision images (*.win)|*.win|GIF Image (*.gif)|*.gif|TGA-Format (*.tga)|*.tga|PCD-Format (*.pcd)|*.pcd|PCX-Format (*.pcx)|*.pcx|PNG-Format (*.png)|*.png|JPEG Bilddatei (*.jpg)|*.jpg|JPEG Bilddatei (*.jpeg)|*.jpeg|Bitmaps (*.bmp)|*.bmp|Symbole (*.ico)|*.ico|Erweiterte Metadateien (*.emf)|*.emf|Metadateien (*.wmf)|*.wmf22

再参照以下代码:
procedure TfrmColor.Button13Click(Sender: TObject);
Var
jpeg: TJPEGImage;
bmp: TBitmap;

FileExt: string[4];
begin
if OpenDialog1.Execute then { Display Open dialog box }
begin
FileExt := AnsiUpperCase(ExtractFileExt(OpenDialog1.Filename));
if (FileExt = '.BMP') or (FileExt = '.ICO') or (FileExt = '.WMF') or
(FileExt = '.EMF') or (FileExt = '.JPG') then
begin
Image1.Picture.LoadFromFile(OpenDialog1.Filename);
if (FileExt = '.BMP') then
begin
Caption := Caption +
Format(' (%d x %d)', [Image1.Picture.Width, Image1.Picture.Height]);
Image1.Picture := Image1.Picture;
end
else
if (FileExt = '.JPG') then
begin
Caption := Caption +
Format(' (%d x %d)', [Image1.Picture.Width, Image1.Picture.Height]);
Image1.Picture := Image1.Picture;
jpeg:= TJPEGImage.Create;
try
jpeg.LoadFromFile(OpenDialog1.Filename);
try
image1.Picture.bitmap.Assign( jpeg );
// image1.Picture.bmp.SaveTofile( ChangeFileExt( filename, '.BMP' ));
finally
end;
finally
jpeg.free
end;

end
else
if FileExt = '.ICO' then
begin
Icon := Image1.Picture.Icon;
Image1.Picture.Icon := Icon;
end;
if (FileExt = '.WMF') or (FileExt = '.EMF') then
Image1.Picture.Metafile := Image1.Picture.Metafile;
end;
end;
end;
 
拷贝到剪贴版也许还可以,但是用Assign却是做不到的。我以前用其他方法做过,没问题,
可现在忘记了,就用上面的方法。
我是想在打印予览的时候能够让用户选择发送传真,可是turbopower的传真控件是要用BITMAP
转换的。
to :yexiaofeng

能不能给出源码?
 
tp是一个image控件
tpbak是一个dbimage控件
看得明白吧?
clipboard.assign(tp.picture);
tpbak.PasteFromClipboard;
 
to :yexiaofeng
如果tp装载的是BMP(其他的没测试),你的做法是可以的。但tp装载的是EMF格式的图象,没用了。
你测试看看。
一般打印都会先产生EMF格式的图象的,但不产生BMP.
 
有没有试过image1.canvas.copyrect,或者canvas.draw,(也许,她可以内部转化)你试一试吧
我没试过,也许行也许不行,不负责的
 
我就是用的Canvas.draw啊!你没看:-)
copyRect不行,我试过了。也许方法不对。
 
大家看看啊
 
我也试了,这样就可以了,
设一个image1,设置根据图片自动大小的功能,
然后image1.canvas.draw(0,0,opendialog1.filename);
接下来如果你想会的图形在窗体上如下:
rect1.left:=image1.left;
rect1.right:=image1.left+image1.width;
....

rect2.left:=.....当然是你相仿的地方了。
from1.canvas.copyrect(rect2,image1.canvas,rect1);
好像就可以了,上面也许说的不准确。
也就是说源矩形块与dest块须设置好也就可以了。
没问题肯定行的,我是过,
 
接受答案了.
 
后退
顶部