Как определить, поврежден ли рисунок или изображение? - PullRequest
1 голос
/ 09 июня 2011

У меня есть Зашифрованные-> Дешифрованные изображения и рисую их на холсте.

У меня нет ошибок при назначении его 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!

Мой вопрос заключается в том, как определить, есть ли у него повреждения, чтобы я мог использовать в нем альтернативное изображение или картинки.

1 Ответ

3 голосов
/ 09 июня 2011

Этой информации недостаточно для продолжения. Единственное, в чем я могу быть уверен, это то, что это почти наверняка не вызвано повреждением зашифрованного изображения. Access Violation означает недопустимый доступ к памяти где-либо. Либо вы разыменовываете указатель nil , либо у вас повреждена память.

Просто, следуя моей интуиции, первое, что я проверю, это то, что вы делаете с приведением указателей в первой строке, правильно. Ошибки указателя являются частым источником нарушений доступа.

Кроме того, это ошибка нулевого указателя или поврежденная ошибка указателя? Вы можете сказать по адресу в нарушении доступа. Если любой из них начинается с группы 0 (или, в редких случаях, группы F), это означает, что вы где-то разыменовываете nil . Убедитесь, что bmp и bmp.canvas назначены. Но если оба адреса выглядят как действительные адреса памяти, значит, у вас повреждение памяти. Это сложнее отследить, и вам придется потратить некоторое время на отладчик.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...