请教个问题!
- 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。