Delphi7:TBitmap.Canvas.Handle = 0

时间:2013-04-08 20:35:30

标签: delphi handle

我长期面对这个问题,并没有找到任何可以帮我解决的问题。 我使用TBitmap接收来自摄像头(流)的数据,然后将图像保存到磁盘。 有时会发生异常。经过几次测试,我发现了这个缺陷:TBitmap的Canvas的句柄属性值为0.要绕过这个问题,当我在句柄中检测到这个值0时,重新启动应用程序(销毁并重新创建TBitmap不起作用),但有时候此错误经常发生。有没有人有这样的问题?我能做错什么?欢迎任何帮助。谢谢。

1 个答案:

答案 0 :(得分:-1)

TBitmap内部为TBitmap.Canvas使用TBitmapCanvas包装器对象。如果您有权访问源(Graphics.pas),您应该看看。有可能是一个或多个WinAPI GDI调用在发生错误时不处理返回值。一些GDI调用失败的可能性非常小,所以省略检查每个返回值以获得一点性能是一种赌博,但在高负载的情况下,这可能是事情出错的第一个指标反正。

我建议您尝试使用调试DCU使用TBitmap.Canvas逐步执行您的程序,列出用于使工作正常的GDI调用,然后对这些操作进行编码,检查返回的值并正确处理任何错误。这应该使您能够了解与摄像机的连接失败时发生的更多情况,并且可能会减少使用TBitmap的一些开销。