怎么把剪贴板中的图元文件保存为BMP或jpg文件??? (100分)

  • 主题发起人 主题发起人 coolzwl
  • 开始时间 开始时间
C

coolzwl

Unregistered / Unconfirmed
GUEST, unregistred user!
我已经把一图元文件放进了剪贴板, 然后想把它保存为一个BMP或JPG格式的文件,该怎么做呀??? 我用Image控件把它从剪贴板中粘贴过来,用的代码如下:
if Clipboard.HasFormat(CF_METAFILEPICT) then
Image1.Picture.Metafile.LoadFromClipboardFormat(CF_METAFILEPICT,0,0)
else
ShowMessage('剪贴板中没有图元类型的数据!');
但执行时总是说不支持的剪贴板格式,为什么???????请大侠指教!!!!!!!!!!
 
打开photoshop 然后在新建文件中PAST 另存为。
 
我晕。楼上的,楼主就是想用程序实现的。
却用photo????
 
让我来。
procedure TForm1.Button1Click(Sender: TObject);
var
bb: TBitmap;
begin
if Clipboard.HasFormat(CF_METAFILEPICT) then
begin
bb := TBitmap.Create;
try
bb.Assign(Clipboard);
Image1.Canvas.Draw(0, 0, bb);
finally
bb.Free;
end;
end;
end;
 
T0 mylem:
先谢谢你了!不过这段代码还是不行,问题出在bb.Assign(Clipboard)这句上,出错信息还是“不支持的剪贴板格式”(原文为:Unsupported clipboard format.)
 
怎么这么没人气呀?????????
是不是嫌分太少了??????????????
谁帮我解决了问题我给他加分就是了!!!!!!!!!!!!!!!!
 
用TImage.Picture.Assign方法是正确的,
为什么会没有该格式呢:
如果你是在文件上Copy的话,是不会有该格式的,
不信你去“画图”中粘贴一下,肯定是没有的啦。
测试:
去可以打开TImage.picture的属性编辑对话框点 “Copy”,然后运行程序试试,然后去“画图”上贴一下,反正在画图能粘的你也能粘啦!!!!!!!
剪切板图片类型<---------CF_BITMAP、CF_METAFILEPICT、CF_PICTURE---------->
呵呵`~~~~~~~~~~~~~~~~~~~~~~~~~
 
你是如何把WMF文件放入剪贴板的?
 
To Netsoft:
呵呵,感谢!!!
我用Image1.Picture.Assign(Clipboard)果然没有再出错!把剪贴板的图像装载到Image控件中了!
但现在又有一个问题:我用Image1.Picture.SaveToFile('c:/QQQQ.bmp')来把它保存为一个图像文件,结果是出来了,但是居然打不开这个文件!!!我用画图打不开,报错说是无效的位图文件或是不支持的文件格式,为什么???该怎么样把它保存为一个图像文件?
 
To mylem:
我是在程序中调用外部程序让外部程序把它放入剪帖板的。没有手工操作的过程。
 
当然不支持啦,
细节如下:
判断是TPicture.Graphic是什么类型然后用相应的属性SaveToFile啦,
如: if TPicture.Graphic is TBitmap then TPicture.Bitmap.SaveToFile('');其实关键是知道其原来的图片类型用相应的扩展名啦,
想想用Bmp的方式去打开一个 Jpeg文件是不是一个错误呢?????

呵呵~~~~~~~~~~~~~~
 
不能使用image1.picture.savetofile实现保存为bmp,方法如下:

procedure BmpToWmf (BmpFile,WmfFile:string);
var
MetaFile : TMetaFile;
MFCanvas : TMetaFileCanvas;
BMP : TBitmap;
begin
MetaFile := TMetaFile.Create;
BMP := TBitmap.create;
BMP.LoadFromFile(BmpFile);
MetaFile.Height := BMP.Height;
MetaFile.Width := BMP.Width;
MFCanvas:=TMetafileCanvas.Create(MetaFile, 0);
with MFCanvas do
begin
Draw(0, 0, BMP);
Free;
end;
BMP.Free;
with MetaFile do
begin
SaveToFile(WmfFile);
Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
BmpToWmf('reboot.bmp','reboot.wmf');
end;
 
我曾进用过SDK2000的图像采集卡,就用了剪贴板。我把部分程序贴出来看看
if clipboard.hasformat(cf_bitmap) then //这句判断剪贴板的格式,如果没有图像就不执行下面的了
begin
tempjpg:=tjpegimage.Create;
FRM_Toll.CAP_Image.Picture.Bitmap.Assign(Clipboard); //这句有用
FRM_Toll.Cap_Image.Refresh;
tempjpg.Assign(FRM_Toll.Cap_image.Picture.Bitmap);
tempjpg.CompressionQuality:=65;
stream := TMemoryStream.Create;
tempjpg.SaveToStream(stream);
... //以下是保存JPG文件了,略...
 
在诸位大侠的帮助启发下,我已经解决问题了,我写的代码如下:
if Clipboard.HasFormat(CF_METAFILEPICT) then
begin
Image1.Picture.Assign(Clipboard);
BitMap := TBitMap.Create;
BitMap.Height := Image1.Picture.Height;
BitMap.Width := Image1.Picture.Width;
BitMap.Canvas.Draw(0,0,Image1.Picture.Graphic);
BitMap.SaveToFile('C:/New.bmp');
BitMap.Free;
end;
很好!呵呵...
再次感谢以上给予我支持和帮助的朋友!
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
893
DelphiTeacher的专栏
D
D
回复
0
查看
959
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部