读书人

请问个有关问题

发布时间: 2012-02-04 15:43:08 作者: rapoo

请教个问题!

Delphi(Pascal) code
   为了方便修改 持久化自定义类   type      Mycalss=(TComponent)   private     FTestBmp:String;       procedure SetTestBmp(Value:String);////////都是默认属性   published     property TestBmp:String Read FTestBmp Write SetTestBmp;----------------   调用时 将Bmp图片流化到StringStream;   var     My:MyClass;   var     bmp:TBitmap;     StrStream:TStringStream;   begin     bmp:=TBitMap.Create;     StrStream:=TStringStream.Create('')     Bmp.LoadFromFile('xxxx');     Bmp.SavetoStream(StrStream);     StrStream.position:=0;     My.TestBmp:=StrStream.DataString;   end;回调图片 :   var     StrStream:TStringStream;   begin      StrStream:=TStringStream.Create(My.TestBmp);      StrStream.position:=0;      Image1.Picture.BitMap.LoadfromStream(StrStream);    end;问题出现在回调上,如果不持久化,在创建自定义类时,执行流化后,调用该类的属性My.TestBmp生成图片成功。持久化后 图片变形严重,错位. 比较原先流化时生成字符串长度发现长度不一1078  和1054  就这个问题请教各位,问题可能出现在什么地方,查看Bitbtn 持久化bitmap过程很复杂 而且里面有些类不对外公布,无法调用,因此想这样简单处理没想到遇到这样的问题。   


[解决办法]
你的TestBmp属性定义的是一个string而你赋值是一个stream,你直接定义成stream或使用StrStream.datastring进行赋值
[解决办法]
支持一下,怀疑一下,是不是对于非固定长度数据(string)持久化时会有问题
[解决办法]
刚才我看My.TestBmp:=StrStream.DataString;的strstream后面怎么没有DataString?



Image1.Picture.BitMap.LoadfromStream(StrStream); //你这样加载bitmap根据你的image大小拉伸了


[解决办法]
帮顶一下下
[解决办法]
恢片,要先把字串一下,即由16制2制(不然被是字串而已,跟原的片就造成出入),再到存流,然后再load。

读书人网 >.NET

热点推荐