2013-04-08 67 views
0

我的程序加載了很多圖像,但是我有一個圖像使用打印屏幕按鈕從遊戲複製它,但它是bmp,像所有其他。每當我運行程序,它說有消息PROJECT1.EXE引發的異常類Ereaderror「流讀取錯誤」的過程停止....加載圖像時發生Delphi流讀取錯誤

的代碼是這樣的:

procedure TForm1.FormCreate(Sender: TObject); 
var path, destination:string; 
begin 
path:=paramstr(0); 
destination:=extractfilepath(path)+'Leagueoflegendsdesktop.bmp'; 
image1.Picture.LoadFromFile(destination); 
end; 

這是正確的。你建議我什麼?

+1

你做了什麼來確保位圖文件是有效的?例如,將其加載到另一個程序中並重新保存。其他應用程序在讀取文件時是否產生錯誤?重新保存的副本在delphi應用程序中打開時是否沒有錯誤? – DaveK 2013-04-08 20:33:47

+0

我用photoshop cs6,但這是唯一的圖片,我有問題,所有其他編輯的photoshop成功加載 – user2242090 2013-04-08 21:45:44

回答

1

唯一的解釋是該文件不是有效的Windows位圖(可能文件被截斷)。或者該文件可能使用Delphi不支持的一些深奧格式。例如,它是否使用運行長度編碼。

如果文件不存在,你會得到一個不同的錯誤,一個表明沒有這樣的文件存在。所以,該文件存在但無法加載。 Ergo,它不是Windows位圖。

步驟1診斷這是看文件的格式。加載位圖文件頭並檢查這些值是否合理。可能最簡單的方法是在調試器下運行程序時逐步瀏覽VCL代碼。啓用調試DCU選項,以便您可以執行此操作。在Graphics單位中的TBitmap.ReadStream中設置一個斷點,然後從中取出。

說了這麼多之後,您可能會更容易避免嘗試調試問題。如果您可以將圖像加載到圖像編輯器中,只需以Delphi將讀取的格式保存圖像的新副本即可。例如普通的香草Windows位圖,或者甚至更好的是將允許壓縮的PNG文件。

+0

感謝您的幫助,但我想通了,我做了一個搜索,我發現了photoshop有時可能會導致這個問題,所以每個使用photoshop的人,將這個圖像保存爲jpeg,然後用其他程序打開保存爲bmp(推薦24位) – user2242090 2013-04-08 21:47:18

+0

那麼,這是否回答你的問題呢?順便說一下,最好使用PNG等無損格式作爲中間格式。 – 2013-04-09 08:16:48

相關問題