高手帮我看看TMemoryStream的使用是否正确,非常重要,请求帮助!!!!

bphantom 2004-08-27 03:37:10
为防止反复创建(create),销毁(free)的麻烦,而且是多处用到。所以在form的Create时创建TMemoryStream
bmpStream : TMemoryStream;//全局
bmpStream := TMemoryStream.Create;//form create时
//添充bmpStream
bmpStream.Clear;
bmpStream.SetSize(Sizeof(bmp));
Bmp.SaveToStream(bmpStream);//存硬盘Bmp.SaveToFile()速度慢,程序执行太快,所以不用。
//取bmpStream中的数据
bmp:= TBitmap.Create;
bmpStream.Position := 0;
bmp.LoadFromStream(bmpStream);

程序中会不断的执行“//添充bmpStream”和“//取bmpStream中的数据”
但有时候 bmp 成了白图,是不是我的使用方法在长久运行后,那里不安全的原因??
我的TMemoryStream使用方法是不是那里不正确???????????
...全文
138 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
aiirii 2004-08-27
  • 打赏
  • 举报
回复
SetSize 應該不用, 用了反而可能出錯!
其它看不出問題
blazingfire 2004-08-27
  • 打赏
  • 举报
回复
使用上是没有什么问题的
bmpStream.SetSize(Sizeof(bmp));//---->这一句纯是理解错误,SizeOf返回的是TBitmap类的大小,不是Bmp真正大小,去掉!!!

可能是你的流里的图片本来就是空白的,或是在以后的代码里给破坏了
bphantom 2004-08-27
  • 打赏
  • 举报
回复
OnPaint到是响应了,不过其中的内容和上面两个函数没关,而且OnPaint中的代码我用全局变量限制了只执行一次。
bphantom 2004-08-27
  • 打赏
  • 举报
回复
如果以前bmpStream中有数据,现又要向bmpStream填充数据,那bmpStream.Clear;这句有没有必要呢??
还有就是bmpStream.SetSize(Sizeof(bmp));这句有没有必要呢??
bphantom 2004-08-27
  • 打赏
  • 举报
回复
"为什么要不停地取bmpStream中的数据呢"因为我不停的抓图,然后不停的解析图片。
顺序是这样的,比如

func1()
begin
抓bmp图...............
//保存到bmpstream
bmpStream.Clear;
bmpStream.SetSize(Sizeof(bmp));
Bmp.SaveToStream(bmpStream);
end;

func2()
begin
//装载bmp图片
bmp:= TBitmap.Create;
bmpStream.Position := 0;
bmp.LoadFromStream(bmpStream);
解析bmp图片.................
end;
执行:
func1();
func2();
zhengji 2004-08-27
  • 打赏
  • 举报
回复
估计是读写不同步所致。

楼主,为什么要不停地取bmpStream中的数据呢?

等往bmpStream写入了一幅图后,触发一个事件,然后读取、显示。这多简洁。

楼主是不是响应了 OnPaint 事件?
wilowind 2004-08-27
  • 打赏
  • 举报
回复
的确 ,setsize 没有必要. 还浪费空间
pandarus 2004-08-27
  • 打赏
  • 举报
回复
no知,帮顶一下也好!
boatzm 2004-08-27
  • 打赏
  • 举报
回复
眨眼看,没有什么问题,盼高手~~
rockswj 2004-08-27
  • 打赏
  • 举报
回复
看不出来
把这个去掉试试:;bmpStream.SetSize(Sizeof(bmp));

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧