我有一個應用程序,我添加圖片,這些都自動轉換爲二進制文件,並存儲在一個單一的文件。我怎樣才能保存多個圖像,我保存在一個XML文件的開始和每個refente的大小爲一個圖像字節。但是每當我嘗試選擇一組不同的字節時,它都有幾個字節的圖像,只是打開相同的圖像。我希望你的幫助能夠解決這個問題並打開不同的圖像。C#讀取字節[]圖像
代碼
//添加圖像
我有一個應用程序,我添加圖片,這些都自動轉換爲二進制文件,並存儲在一個單一的文件。我怎樣才能保存多個圖像,我保存在一個XML文件的開始和每個refente的大小爲一個圖像字節。但是每當我嘗試選擇一組不同的字節時,它都有幾個字節的圖像,只是打開相同的圖像。我希望你的幫助能夠解決這個問題並打開不同的圖像。C#讀取字節[]圖像
代碼
//添加圖像
的偏移參數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;
}
感謝您的回覆。顯然是正確的,但我試圖以兩種不同的方式調用代碼:getImageFromByte(0,12161);和getImageFromByte(12162,19905);理論上講,是打開兩個不同的圖像,但打開相同的圖像 – LucasGuitar
@LucasGuitar:你試過兩個例子嗎?你是否單步執行代碼並調查它在做什麼?另外,你確定你的保存代碼是正確寫入文件嗎? –
我覺得錯誤是時候創建二進制文件 – LucasGuitar
最簡單的方法是使用序列化和反序列化
使類
[serializable]
myImage
{
Byte[] ImageData;
}
Add each image to a List
List<myImage>
編寫直接使用序列 閱讀直接使用deseriali列出到文件zation
我無法理解 – LucasGuitar
這是否甚至編譯?你可以調用'getImageFromByte()',但不傳參數。 –
我忘了放在那裏,但應用程序有 – LucasGuitar
然後*編輯*您的問題。當你的問題充滿了誤導性的東西時,人們很難給出很好的答案。 –