图像的读出问题?(100分)

  • 主题发起人 主题发起人 fzzz_radium
  • 开始时间 开始时间
F

fzzz_radium

Unregistered / Unconfirmed
GUEST, unregistred user!
我定义了一个结构 如下: TRec = Record
name : string;
pic : TJpegImage;
end;
然后,我把该种类型的记录存入相应的文件 recFile.rec(自定义文件) 中;
但是,我要从文件中读出记录,放到image中出错时,出错
读出过程
function Loadpic(name : string): TJpegImage;
var
f: file of TRec;
len, i: integer;
rec1: TRec;
begin
assignfile(f,'recFile.rec');
reset(f);
len := filesize(f);
result := nil;
for i := 0 to len-1 do
begin
seek(f,i);
read(f,rec1);
if (rec1.name = name) then
begin
result := rec1.pic;
break;
end;
end;
closefile(f);
end;
主程序中:
Jpic : TJpegImage;
Jpic := Loadpic(name);
image1.picture.assign(Jpic);
出错!!

应该怎么读取呢?是不是LoadPic()传送的是一个指针?
多多指教。
 
结构更改为:

我定义了一个结构 如下: TRec = Record
name : string;
pic : string; // 修改
end;

function Loadpic(name : string): TJpegImage;
var
f: file of TRec;
len, i: integer;
rec1: TRec;
jpg: TJpegImage; // 增加一行
begin
assignfile(f,'recFile.rec');
reset(f);
len := filesize(f);
result := nil;
for i := 0 to len-1 do
begin
seek(f,i);
read(f,rec1);
if (rec1.name = name) then
begin
jpg := TJpegImage.Create; // 加以下三行
jpg.LoadFromFile(rec1.pic); //
result := jpg; //
break;
end;
end;
closefile(f);
end;
主程序中:
Jpic : TJpegImage;
Jpic := Loadpic(name);
image1.picture.assign(Jpic);
jpic.Free; // 再加一行
出错!!
 
什么意思?看不懂,你用的rec1.pic是什么?
 
主程序中:
Jpic : TJpegImage;
Jpic :=TJpegImage.create;
Jpic := Loadpic(name);
image1.picture.assign(Jpic);
Jpic .free
 
同意cqbaobao的看法,对象是无法存放在文件中的。
 
用结构化存储,可以保存对象.也既流.
 
不是很懂,能说的具体点吗?,谢谢了
 
to weekboy:
你这样我试过了,好像不行,还是access violation
 
我逐步调试了,问题是在image1.picture.assign(Jpic)
这步出错access violation

还有TO cqbaobao : 我是要将图像资料存入文件,并不是只要记住他的路径,因为图像
可能被存入后就删掉。
 
image1.picture:=Jpic
 
先看看你是怎么把 jpg 图象写进文件里的?
 
存入过程如下:
procedure SavePicture(name: string; pic: TJpegImage);
var
f: file of TRec;
len: integer;
rec1: TRec;
begin
assignfile(f,'recFile.rec');
reset(f);
len := filesize(f);
rec1.name := name;
rec1.pic := pic;
if len = 0 then write(f,person)
else
begin
seek(f,len);
write(f,rec1);
end;
closefile(f);
end;

to weekboy :
你这样做是肯定不行的,TPicture与TJpegImage是不能匹配的

大家多多帮忙啊,
 
呵呵,你这样写入的根本不是图象文件呀,只是类在内存里的数据;

结构化存储俺也不会,等待高人来指点:)

不过,如果你的图象都一样大,我想还是可以用流的方法写进记录型文件;能写你也就会读了。
但如果你的图象不一样大,就不能写成记录型文件了:(
 
先读图片进剪贴板,然后粘贴到TImage。
 
To 天与地:
怎么做呢?说说看,我不懂。

To cqbaobao:
你的意思是不是这样的存储方式,只是将一个内存地址存入记录中?
我对于“类在内存里的数据”的意思不太理解。
 
那能这样写程序,你存的根不是图像呀,用一个最简单的方法吧
你把图像存储在数据表内不就成了,(用一个BLOB字段)
如不这样作你可能来要这样做
1.将JPG SaveToStream 中
再用一个新流,存储方式如下
0000 [图像大小:integer ]=L1 字节
0004 [图像.......]
0004+L1[图像大小]=L2
0004+L1+4[图像.....]

0000 [图像大小:integer ]=L1 字节
0004 [图像大小]=L2
....
0010 [图像大小]=L2
0014 [图像.......]
00.. [图像.......]
XXXX [图像.......]
 
不是很懂怎么用,我不用数据库,
能不能结合我的例子说说
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
695
import
I
后退
顶部