2009-10-01 59 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