2013-02-09 46 views
0

我想從資源文件中讀取一些gif和位圖,我使用資源黑客將圖像包含到project.res文件中,但我使用的代碼似乎並沒有返回正確的圖像數。從TResourceStream讀取

下面是什麼,我試圖做

Stream := TResourceStream.Create(HInstance,'EMOTES','BIN'); 
GetMem(Buffer,40000); 
Stream.Read(StreamCount,4); 
For I := 0 To StreamCount - 1 Do Begin 
    Stream.Read(StreamSize,4); 
    Stream.Read(Buffer^,StreamSize); 
    ImageStream := TMemoryStream.Create; 
    ImageStream.Write(Buffer^,StreamSize); 
    ImageStreamList.Add(ImageStream); 
    ImageStream.Free; 
End; 
FreeMem(Buffer); 
Stream.Free; 
+0

那麼,究竟是什麼問題?什麼是輸入,什麼是預期輸出,什麼是實際輸出? FWIW如果你想包含資源,那麼你不需要使用GUI程序資源黑客。現代版本的Delphi IDE爲您編譯資源,舊版本使用brcc32。 – 2013-02-09 16:14:34

+0

我在.res文件中添加了一個gif,其中「BIN」作爲資源類型,「EMOTES」作爲資源名稱,所以我期望streamcount爲1,但streamcount值是一些隨機數,最終導致訪問衝突錯誤。我正在使用Delphi 7 – 2013-02-09 16:21:48

+0

什麼是流計數?你爲什麼期望gif文件的前4個字節是$ 00000001?當然你會得到GIF標題。 '40000'有什麼特別之處? – 2013-02-09 16:22:52

回答

3

你似乎試圖從資源加載一個GIF文件。像這樣做:

Stream := TResourceStream.Create(HInstance, 'EMOTES', 'BIN'); 
try 
    image.LoadFromStream(Stream); 
finally 
    Stream.Free; 
end; 

其中imageTGIFImage類型的實例化對象。

我真的無法弄清楚你的代碼試圖做什麼。也許你有多個圖像。在這種情況下,爲每個圖像創建一個資源,每個資源具有不同的名稱。請注意,我不是指每個圖像一個.res文件。您可以將所有圖像放入一個.rc文件中,每個資源的名稱不同。然後將該.rc文件編譯爲.res文件並鏈接到您的應用程序。