2014-06-13 185 views
-2

我有一個應用程序,我添加圖片,這些都自動轉換爲二進制文件,並存儲在一個單一的文件。我怎樣才能保存多個圖像,我保存在一個XML文件的開始和每個refente的大小爲一個圖像字節。但是每當我嘗試選擇一組不同的字節時,它都有幾個字節的圖像,只是打開相同的圖像。我希望你的幫助能夠解決這個問題並打開不同的圖像。C#讀取字節[]圖像

代碼

//添加圖像

+1

這是否甚至編譯?你可以調用'getImageFromByte()',但不傳參數。 –

+0

我忘了放在那裏,但應用程序有 – LucasGuitar

+0

然後*編輯*您的問題。當你的問題充滿了誤導性的東西時,人們很難給出很好的答案。 –

回答

1

偏移參數FileStream.Read是要被放置在數據緩衝區中的起始偏移量。如果您想從流中的偏移量讀取,則必須將Seek指定到該位置。我認爲你想要的是以下內容,儘管我不完全確定BitmapFrame.Create如果文件中有更多的數據超出它想要讀取的圖像的範圍,那麼它會執行什麼操作。

fs.Seek(start, SeekOrigin.Begin); 
Image image = new Image(); 
image.Source = BitmapFrame.Create(fs, BitmapCreateOptions.None, BitmapCacheOption.OnLoad); 

將文件指針移動到正確的起始位置。

我消除了字節數組,因爲你似乎沒有使用它的任何建設性。

如果不工作,那麼你就必須將數據讀入一個字節數組,創建一個MemoryStream,並創建該位圖:

byte[] ida = new byte[length]; 
using (FileStream fs = File.OpenRead("Escudos.bcf")) 
{ 
    fs.Seek(start, SeekOrigin.Begin); 
    fs.Read(ida, 0, length); 
} 
using (MemoryStream ms = new MemoryStream(ida)) 
{ 
    Image image = new Image(); 
    image.Source = BitmapFrame.Create(fs, BitmapCreateOptions.None, 
     BitmapCacheOption.OnLoad); 
    imgPatch2.Source = image.Source; 
} 
+0

感謝您的回覆。顯然是正確的,但我試圖以兩種不同的方式調用代碼:getImageFromByte(0,12161);和getImageFromByte(12162,19905);理論上講,是打開兩個不同的圖像,但打開相同的圖像 – LucasGuitar

+0

@LucasGuitar:你試過兩個例子嗎?你是否單步執行代碼並調查它在做什麼?另外,你確定你的保存代碼是正確寫入文件嗎? –

+0

我覺得錯誤是時候創建二進制文件 – LucasGuitar

0

最簡單的方法是使用序列化和反序列化

使類

[serializable] 
myImage 
{ 
    Byte[] ImageData; 
} 

Add each image to a List 
List<myImage> 

編寫直接使用序列 閱讀直接使用deseriali列出到文件zation

+0

我無法理解 – LucasGuitar