图像嵌入到自己的文件
我已经编辑了这个问题,使其更容易理解。图像嵌入到自己的文件
我有一个图像文件,我必须将图像数据存储到二进制现有文件。当再次在我的程序中打开该文件时,应该以某种方式读取该二进制数据,并将该图像显示在一个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());
我可能会倾向于在您的文件中创建一个代表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块。
是否有任何理由,为什么你不能只使用原生图像格式和准元呢?
看一看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());
谢谢你的链接。更详细的解释已经添加到我的问题(底部):) – 2009-10-01 03:55:48
非常感谢你为这个代码Khanzor。如果你碰到了问题,我已经在我的主要问题中添加了一些问题:) – 2009-10-01 04:51:42
谢谢tim jarvis,我可以问你一些关于你的答案的后续问题吗? – 2009-10-01 05:21:22
当然,要求离开。 – 2009-10-01 05:24:11
耶谢谢你!所以,与您的答案...我只是把这个代码在按钮点击事件时,当我想保存一个图像,并在另一个当我想要加载图像?它似乎很简单,但我有点困惑。 (也许是因为我期待着这样的任务太复杂和枯燥)? – 2009-10-01 06:25:18