2011-06-09 24 views
1

我有加密 - >解密圖像並將其繪製到畫布上。如何確定圖形或圖片是否受損?

我把它分配給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

這個問題需要嚴肅的語法護理 – 2011-06-09 15:55:44

回答

3

這還不是足夠的信息。我可以肯定的一件事是,它幾乎肯定不是由加密圖像的損壞造成的。 Access Violation表示某處存在無效的內存訪問。要麼你提取的指針是,或者你的內存已損壞。

剛開始我的直覺反應,我會檢查的第一件事是,無論你在第一行中使用指針投射做什麼都是正確的。指針錯誤是訪問衝突的常見原因。

此外,這是一個零指針錯誤或一個損壞的指針錯誤?您可以通過訪問衝突中的地址來判斷。如果任何一個以一堆0開頭(或者在極少數情況下,一堆F),那麼這意味着你在某處取消了。確保分配了bmpbmp.canvas。但是,如果地址都看起來像有效的內存地址,那麼你的內存已經損壞。這很難追查到,你將不得不花費一些時間與調試器。

+0

你有一點..我會檢查出來...... – XBasic3000 2011-06-09 03:27:46

+1

根據'DecryptJepegImage(...)'的定義,如果解密可能不會分配'jpg'失敗。如果'jpg'實際上是一個輸出參數,可能會發生這種情況。我在'bmp.Canvas'行放置了一個制動點,並在調試器中檢查了所有'nil'。或者在調用StretchDraw()之前添加一堆'Assert(Assigned(Name));'。 – 2011-06-09 05:55:06

相關問題