将图像嵌入到自己的文件中

时间:2009-10-01 03:32:55

标签: c# image winforms embed

我编辑了这个问题,以便更容易理解。

我有一个图像文件,我必须将图像数据存储到二进制的现有文件中。当该文件再次在我的程序中打开时,应该以某种方式读取该二进制数据并将该图像显示在图片框内。我将如何在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 个答案:

答案 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