我有加密 - >解密图像并将其绘制到画布上。
将它分配给jpg(TJpegImage)时没有错误
DecryptJepegImage(PWordInfo(FWordList[i])^.Image, jpg); // No errors here
但是当我要将它画到画布上时我遇到了错误。
bmp.Canvas.StretchDraw(Rect(0, 0, bmp.Width, bmp.Height), jpg); // says Access violation!
我的问题是如何确定它是否有损坏,以便我可以在其中使用替代图像或图片。
答案 0 :(得分:3)
这还不是足够的信息。我可以肯定的一件事是它几乎肯定不是由加密图像的损坏引起的。 Access Violation
表示某处无效的内存访问。您可以取消引用 nil 的指针,或者您的内存已损坏。
仅仅通过我的直觉反应,我要检查的第一件事就是你在第一行中使用指针转换做的事情是正确的。指针错误是访问冲突的常见原因。
此外,这是一个nil指针错误还是一个损坏的指针错误?您可以通过访问冲突中的地址来判断。如果任何一个以一堆0开头(或者在极少数情况下,一堆Fs)那么这意味着你在某处取消引用 nil 。确保已分配bmp
和bmp.canvas
。但是如果地址看起来都像有效的内存地址,那么你就会有内存损坏。这很难追踪,你将不得不花一些时间在调试器上。