Delphi中如何将剪贴板中图片保存到文件中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Delphi中如何将剪贴板中图片保存到文件中相关的知识,希望对你有一定的参考价值。

参考技术A uses Clipbrd;

procedure TForm1.Button1Click(Sender: TObject);
var
Abmp:Tbitmap;
begin
Image1.Picture.Metafile.Assign(ClipBoard);
Abmp := Tbitmap.Create;
Abmp.Height:=Image1.Picture.Metafile.Height;
Abmp.Width:=Image1.Picture.Metafile.Width;
Abmp.Canvas.Draw(0,0,Image1.Picture.Metafile);
Abmp.SaveToFile ('c:\abcd.bmp');
Abmp.free;
end;追问

还是不行啊,用那个fromclipboardformat也不行,都说是不支持的文件格式

本回答被提问者采纳

delphi 中如何将图片数据保存到dat文件里的,然后读取出来,并在Image控件中显示。

参考技术A 先定义好图片的一个类型
TImageType = record
ImageName : string;
width : integer;
height : integer;
ImageData : array[0..49,0..49] of byte;
end;

存图片:
procedure TForm1.SaveImage(path: string);
var
bit : TBitmap;
i,j : integer;
myImage : array[0..999] of TImageType;
FN : string;
dat : TFileStream;
begin
bit := TBitmap.Create;
bit.LoadFromFile(path);
myImage[0].ImageName := 'test';
myImage[0].width := bit.Width;
myImage[0].height := bit.Height;
for i := 0 to bit.Width - 1 do
begin
for j:= 0 to bit.Height - 1 do
begin
myImage[0].ImageData[i,j] := bit.Canvas.Pixels[i,j];
end;
end;

FN := 'C:/test.dat';
dat := TFileStream.Create(FN,fmOpenWrite);
dat.Write(myImage,sizeof(myImage));
dat.Free;
end;

读图片

procedure TForm1.LoadImagefromDat(path: string;image :Timage);
var
dat : TFileStream;
myImage : array [0..999] of TImageType;
i,j : integer;
begin
dat := TFileStream.Create(path,fmOpenRead);
dat.Read(myImage,sizeof(myImage));
dat.Free;

for i := 0 to myimage[0].width - 1 do
begin
for j:= 0 to myImage[0].height - 1 do
begin
image.Canvas.Pixels[i,j] := myImage[0].imagedata[i,j];
end;
end;

end;

未经测试,大致流程应该差不多了追问

谢谢你的答案,但程序在运行时提示出错,stack overflow

追答

是栈溢出了,

myImage : array [0..999] of TImageType;
改成 myImage : array [0..999] of PImageType;
只申明指针试下
用时再分配内存 getmem(myimage[0],sizeof(Timagetype))给指针赋值

追问

我写入的图片是很大的,有1024*768这么大,这样的写入方法会很慢,有没有更快一点的方法。

追答

写入都是逐点写入了,没什么更快的了,或你可以调整小点分辨率,每2到3个点录一个,只是清淅度低点

参考技术B savetofile可以保存成文件,保存时文件名改成DAT就可以
相反的
loadfromfile可以从文件中加载图像追问

savetofile可以保存成Dat文件,但读取就不可以了,而且我是想把大量的图片保存在一个DAT文件里,并读取出来,Image控件中显示

追答

只保存到一个文件的话,只能用数据库,鉴于你只要一个文件的话,也不要太复杂的数据库,用ACCESS就可以了,把图片用二进制方式存入数据库就可以了

参考技术C 面版的添加删除,点添加删除windows组件,在对话框里其他的勾去掉,勾选windows media player点下一步安装.试试看

windows组件不要删,否则会出很多问题.追问

我刚刚测试了一下,把array[0..999] of TImageType;改为array[0..255] of TImageType就没事了,但我写入的图片是很大的,有1024*768这么大,这样的写入方法会很慢,有没有更快一点的方法。

参考技术D //以下代码适合TBitmap类型
//保存
procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Picture.Bitmap.SaveToFile(aFile);
end;
//加载
procedure TForm1.BitBtn1Click(Sender: TObject);
var
aStream: TMemoryStream;
begin
aStream := TMemoryStream.Create;
aStream.Position := 0;
aStream.LoadFromFile(aFile);
Image2.Picture.Bitmap.LoadFromStream(aStream);
aStream.Free;end;追问

这样只可以存取一张图片,我需要存取大量的图片。只用一个DAT文件存取。

追答

针对你的题目,已经在空间中发表一篇解决方法,请看:
http://hi.baidu.com/yueyun889/blog/item/7851b31e44773c0b403417f0.html

本回答被提问者采纳
第5个回答  2011-03-08 多个图片存储到一个.dat文件中比较麻烦,图片格式是否是统一的?

以上是关于Delphi中如何将剪贴板中图片保存到文件中的主要内容,如果未能解决你的问题,请参考以下文章

delphi 中如何将图片数据保存到dat文件里的,然后读取出来,并在Image控件中显示。

Delphi 7-如何将图片保存在数据库中

MS Access 将剪贴板中的图片保存为 jpg

delphi 从 TWebbrowse组件中获取图片

DELPHI如何读取一个图片,保存到字节数组中

在 macOS 中,如何自动压缩截屏图片大小