存入数据库是通过 MemoryStream的,即网上最常见的方法。存入BITMAP,JPEG都没发现失真,但存入TICON就有失真的现象。我自己测试了下,发现在将TICON写入流时就出现了失真情况。测试代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
ms: TMemoryStream;
icon: TIcon;
begin
if not Assigned(Image1.Picture.Graphic) then
Exit;
ms:= TMemoryStream.Create;
Image1.Picture.Graphic.SaveToStream(ms); icon:= TIcon.Create;
ms.Position:= 0;
icon.LoadFromStream(ms);
Image2.Picture.Assign(icon);
icon.Free;
end;上面只对ICON做了一次stream转换,但转换后读取出来就出现失真现象了,我不知道是不是和图标文件有关(如图标文件的色彩等)。请教下应该如何解决。
procedure TForm1.Button1Click(Sender: TObject);
var
ms: TMemoryStream;
icon: TIcon;
begin
if not Assigned(Image1.Picture.Graphic) then
Exit;
ms:= TMemoryStream.Create;
Image1.Picture.Graphic.SaveToStream(ms); icon:= TIcon.Create;
ms.Position:= 0;
icon.LoadFromStream(ms);
Image2.Picture.Assign(icon);
icon.Free;
end;上面只对ICON做了一次stream转换,但转换后读取出来就出现失真现象了,我不知道是不是和图标文件有关(如图标文件的色彩等)。请教下应该如何解决。
给个例子给你
var
mm : TMemoryStream;
begin
mm := TMemoryStream.Create;
Image1.Picture.Icon.SaveToStream(mm);
mm.Seek(0,0);
Image2.Picture.Icon.LoadFromStream(mm);
mm.Clear;
mm.Free;
end;
--------------
回答 jjwwang(风归叶):没试过,而且我要应用到的地方也不可能去这么转一下的。
我下午又测试了下,可能是图标包涵的颜色数量引起的,并不是所有图标都会引起失真现象(可能是所有图标都会有失真,但某些图标比较明显,而有些又不明显)我打开了2个图标。都用 PrinttScreen 按键截取屏幕,然后通过“附件->画图”保存成24位位图和16色 位图, 1个图标看不出什么失真情况(或许实际上存在,但并不明显),另一个就相当明显的发生了失真现象。
即:
存数据库:Icon --> 转成Bitmap --> 写入stream --> 存入数据库。
从数据库读取: --> 读入stream --> Bitmap转成Icon