-1


我有一个面板(TPanel),它是在运行时创建的其他许多面板的父级。我想将所有这些都像图像(位图,图形,无论如何..)一样保存到数据存储中。我用这个:

image1.Picture:= nil;
panel1.PaintTo(image1.Canvas.Handle,0,0);
table1.edit;
table1.FieldByName('Im').Assign(image1.Picture.Bitmap);    
table1.Post;


和这个:

var
Bitmap: TBitmap;
BmpField: TGraphicField;
begin
BmpField := table1.FieldByName('Im') as TGraphicField;
Bitmap := TBitmap.Create;
try
Bitmap.Width := Panel1.Width;
Bitmap.Height := Panel1.Height;
Panel1.PaintTo(Bitmap.Canvas.Handle, 0, 0);
table1.Edit;
BmpField.Assign(Bitmap);
table1.Post;
finally
Bitmap.Free;
end;
end;


感谢Ken White,这两种方法都有效,但是......当我将数据集保存为 .xml 并在文本编辑器中打开该 .xml 时,保存在那里的图像是一个无限的字符串(不大,但无限!)。
有没有办法像数据库中的普通图像一样保存这个面板(里面有面板),并且保存的 .xml 字符串是一个像样的?谢谢你。

4

1 回答 1

0

我在另一篇文章中解释了这一点。必须对图像进行编码(转换为二进制以外的内容)才能写入 XML。它不是“无限的”。这是编码的图像。您不能将二进制图像存储为 XML 中的实际图像。这一个体面的。:-)

你能解释一下你的实际目标是什么吗?该图像在 XML 的图形字段中非常好。(您可以将它写在那里,然后检索它并显示在 a 中TImage,对吗?)我不明白您为什么一直想将二进制数据库字段作为字符串读取;它不是一个字符串。它是一个包含图形图像的二进制字段。绿色草地的字符串图片会是什么样子?

于 2013-06-30T16:26:40.853 回答