我编辑了这个问题,以便更容易理解。
我有一个图像文件,我必须将图像数据存储到二进制的现有文件中。当该文件再次在我的程序中打开时,应该以某种方式读取该二进制数据并将该图像显示在图片框内。我将如何在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());
答案 0 :(得分: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块的情况你在追求。
答案 1 :(得分: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());
答案 2 :(得分:0)
Microsoft Word文档是结构化存储文件(本质上是文件中的文件系统)。 MSDN开始解释它here