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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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文件中比较麻烦,图片格式是否是统一的?

如何将word中的图片和文字导入自己的博客中

参考技术A

如何将word中的图片和文字导入自己的博客中

方法一:
首先,选中要截的图,选择保存为BMP或JPG格式。然后,将光标放到自己博客中要插入图片的位置,然后找到刚才保存的图片,上传,确定,插入即可。
方法二:
1、打开含有图片的word文档。
2、选择“文件——另存为”,弹出“另存为”对话框,选择“保存类型”为“网页(*.htm;*.)”,文件名随便输入(假设文件名是abc),保存位置你自己决定(假设保存位置是“桌面”),点“保存”。
3、回到“桌面”,这时在“桌面”上会有abc.htm,还有一个名字为abc.files的文件夹。打开“abc.files文件夹”,就可以看到word文档中所包含的全部图片了。
4、登录博客用户管理后台,点“发布日志”,先将文字内容“复制”后“粘贴”到日志编辑区,将光标定位到需要插图图片的位置,点“上传图像”按钮,弹出“图片—网页对话框”,点右边的文件夹小图标,弹出“网页对话框”,点“浏览”,选择要上传的图片,点“上传”,提示上传成功后,点“确定”,返回到“图片—网页对话框”。
5、输入“显示文字”(就是当鼠标指向图片时显示的文字,也可以不输入),选择适当的“对齐”方式和“边框样式”,还可以在这里输入图片的“宽度”和“高度”,以及图片“上、下、左、右”边距,最后点“插入”,图片就插入到日志中了。

如何将word文章中的图片发到教师博客中

要将图片发到教师博客中,必须将word图片保存为图片文件,通常格式为jpg,bmp.png等,那么如何将图片保存为图片文件呢,方法有二:
1,复制word图片,打开QQ任意聊天窗口,粘贴,右键另存为,选择路径,保存即可
2,复制word图片,打开画图程序,粘贴,保存即可

如何在自己的博客中贴图?如何把图片放入相册?

如果您是要把自己电脑上的图片发布到个人博客中的话,您只需先将电脑上的图片上传到网络上(可以选择上传到博客个人空间,也可以上传到图片博客),上传之后请您记住该图片的网络地址。然后在撰写文章时点击插入图片的按钮,将您记住的图片地址添加到弹出的对话框中即可
在博客中添加图片是很简单方便的,请您尝试一下

如何将coreldraw中的图片和文字做成word文档形式

晕,你要WORD格式的用WORD编辑很简单的啊,复制,粘贴就行了

我如何将自己的博客中的电子杂志下载到U盘中

那就看长短了,给你说一种我常用的方法:找本电子书,全栓出,然后复制、粘贴==OK?

怎样将word中的图片插入到CSDN博客中

请在此输入您的回答
打开我们的word文档,然后点击左上角的WPS文字(用WPS为例)
选择另存为
选择自己喜欢的目录,然后选择我们的保存格式,选择格式
点击保存,就会出现两个文件
一个是files 一个是(如果文档里面没有图片的话,就不会产生files这个文件了)
之后就可以在我们的博客页面中选择文件了
然后出现下面的界面
选中之后,就可以上传 --- 插入 了,就到了我们的博客中了

如何将word中的图片导入indesign中不失真

只要导入时,不将图片放大或缩小,按原图片大小显示就可以不失真。

如何将带图片的word文档复制到博客中

直接复制,粘贴即可,一般博客编辑器里面都有个word粘贴工具,直接粘贴在你需要的地方。就OK了。希望能够帮到您!

如何在自己的博客中书写文章

直接写 点开博客,有个写新博客啊~~写就好了 写文章

如何将自己站外博客中的文章导入到QQ空间日志

你好,QQ空间日志页面右方有个日志导入,点击开始导入,会让你选择导入来源,下拉菜单仅提供人人网、开心网、网易博客的日志导入。输入登录名:例如网易博客用户yes125553@163.,然后从你的博客日志中勾选你要导入的日志就ok了。

以上是关于delphi 中如何将图片数据保存到dat文件里的,然后读取出来,并在Image控件中显示。的主要内容,如果未能解决你的问题,请参考以下文章

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

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

将数据保存为 *.dat 文件?

Delphi用ADOQuery将图片存入ACCESS,求一个示例。

matlab导入CSV文件

如何在 Delphi 中添加越来越多的已保存文件?