2009-10-01 67 views
1

我已經編輯了這個問題,使其更容易理解。圖像嵌入到自己的文件

我有一個圖像文件,我必須將圖像數據存儲到二進制現有文件。當再次在我的程序中打開該文件時,應該以某種方式讀取該二進制數據,並將該圖像顯示在一個picturebox內。我將如何去在C#中做這件事?

任何幫助/建議大加讚賞。

謝謝 jase

編輯:

因爲我們的文件有以下幾種結構:

Control 
"Text here" 
Location 

...而且會有很多的情況下,有一個以上或在同一個文件中的幾個控件像這樣:

Label 
"This is a label" 
23, 44 
Label 
"This is another label" 
23, 64 
LinkLabel 
"This is a linkLabel" 
23, 84 

...

我不知道在哪裏放置/保存下面的代碼:

也許像這樣裏面的文件...:

Image 
"<controlLocationData type="Image"> 
    <Data> 
    Base64 encoded image data here 
    </Data> 
    <FreeformLocation>60, 40</FreeforLocation> 
</controlLocationData>" 
60, 40 

,然後用下面這段代碼保存/負載顯示圖像?...

var image = LoadBitMap("My Bitmap"); 
var stream = new MemoryStream(); 
image.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp); 
string base64Encoded = Convert.ToBase64String(stream.ToArray()); 

回答

3

我可能會傾向於在您的文件中創建一個代表BMP位的base64文本塊。

編輯:

看起來你已經在正確的軌道上,我發現,這些類型的轉換,一對夫婦的擴展方法是很方便...

public static string ToBase64String(this Bitmap bm) 
{ 
    MemoryStream s = new MemoryStream(); 
    bm.Save(s, System.Drawing.Imaging.ImageFormat.Bmp); 
    s.Position = 0; 
    Byte[] bytes = new Byte[s.Length]; 
    s.Read(bytes, 0, (int)s.Length); 
    return Convert.ToBase64String(bytes); 
} 

public static Bitmap ToBitmap(this string s) 
{ 
    Byte[] bytes = Convert.FromBase64String(s); 
    MemoryStream stream = new MemoryStream(bytes); 
    return new Bitmap(stream); 
} 

您的文本文件的格式是沒什麼大不了的,你只需要能夠索引它爲您的數據,所以XML是一種常見的格式,但正如我所說,它只是發現的情況下,你在之後的base64塊。

+0

謝謝tim jarvis,我可以問你一些關於你的答案的後續問題嗎? – 2009-10-01 05:21:22

+0

當然,要求離開。 – 2009-10-01 05:24:11

+0

耶謝謝你!所以,與您的答案...我只是把這個代碼在按鈕點擊事件時,當我想保存一個圖像,並在另一個當我想要加載圖像?它似乎很簡單,但我有點困惑。 (也許是因爲我期待着這樣的任務太複雜和枯燥)? – 2009-10-01 06:25:18

1

是否有任何理由,爲什麼你不能只使用原生圖像格式和準元呢?

看一看this document on msdn有關抽象的方式訪問元數據信息。

我不理解「控制」節的目的 - 這是正在使用什麼?

編輯

正如蒂姆說,這可能不是一個壞主意,Base64編碼,圖像,只是包圍...某種標記的信息。

如果你不討厭尖括號稅,你可以嘗試

<controlLocationData type="Image"> 
    <Data> 
    Base64 encoded image data here 
    </Data> 
    <FreeformLocation>60, 40</FreeformLocation> 
</controlLocationData> 

編碼和解碼的數據,您需要使用Convert.ToBase64String方法,像這樣

var image = LoadBitMap("My Bitmap"); 
var stream = new MemoryStream(); 
image.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp); 
string base64Encoded = Convert.ToBase64String(stream.ToArray()); 
+0

謝謝你的鏈接。更詳細的解釋已經添加到我的問題(底部):) – 2009-10-01 03:55:48

+0

非常感謝你爲這個代碼Khanzor。如果你碰到了問題,我已經在我的主要問題中添加了一些問題:) – 2009-10-01 04:51:42

0

Microsoft Word文檔是結構化的存儲文件(本質上是文件中的文件系統)。 MSDN開始解釋它here