我已经加密->解密图像并将其绘制到 Canvas 上。
将其分配给 jpg(TJpegImage) 时没有出现错误
DecryptJepegImage(PWordInfo(FWordList[i])^.Image, jpg); // No errors here
但是当我将其绘制到 Canvas 上时出现错误。
bmp.Canvas.StretchDraw(Rect(0, 0, bmp.Width, bmp.Height), jpg); // says Access violation!
我的问题是如何确定它是否有损坏,以便我可以使用其中的替代图像或图片。
最佳答案
这还不足以继续下去。我可以非常确定的一件事是,这几乎肯定不是由加密图像损坏引起的。 访问冲突
意味着某处的内存访问无效。要么您取消引用nil的指针,要么您的内存已损坏。
根据我的直觉 react ,我要检查的第一件事是,无论您在第一行中对指针进行转换是否正确。指针错误是访问违规的常见原因。
此外,这是零指针错误还是损坏的指针错误?您可以通过访问冲突中的地址来判断。如果其中任何一个以一堆 0 开头(或者在极少数情况下,是一堆 F),那么这意味着您在某处取消引用 nil 。确保已分配 bmp
和 bmp.canvas
。但如果这两个地址看起来都像有效的内存地址,那么就会出现内存损坏。这更难追踪,并且您必须花一些时间使用调试器。
关于delphi - 如何判断图形或图片是否损坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6287610/