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

C# 将图像嵌入到自己的文件中,c#,image,winforms,embed,C#,Image,Winforms,Embed,我对这个问题进行了编辑,以便更容易理解 我有一个图像文件,我必须将图像数据以二进制形式存储到现有文件中。当我的程序再次打开这个文件时,应该以某种方式读取二进制数据,并将图像显示在picturebox中。我该如何用C#来做这件事 非常感谢您的帮助/建议 多谢各位 贾斯 编辑: 因为我们的文件具有以下结构: Control "Text here" Location …在许多情况下,同一文件中有多个控件,如下所示: Label "This is a label" 23, 44 Label "This

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

我有一个图像文件,我必须将图像数据以二进制形式存储到现有文件中。当我的程序再次打开这个文件时,应该以某种方式读取二进制数据,并将图像显示在picturebox中。我该如何用C#来做这件事

非常感谢您的帮助/建议

多谢各位 贾斯

编辑:

因为我们的文件具有以下结构:

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

有什么原因不能只使用本机图像格式并将元数据与之关联

查看有关以抽象方式访问元数据的信息

我不明白“控制”部分的目的——这是用来做什么的

编辑

正如Tim所说,对图像进行base64编码并将信息环绕在。。。某种标记

如果你不讨厌角括号税,你可以试试

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

有什么原因不能只使用本机图像格式并将元数据与之关联

查看有关以抽象方式访问元数据的信息

我不明白“控制”部分的目的——这是用来做什么的

编辑

正如Tim所说,对图像进行base64编码并将信息环绕在。。。某种标记

如果你不讨厌角括号税,你可以试试

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

我可能倾向于在文件中创建一块表示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块的一种情况。

我可能会倾向于在您的文件中创建一个代表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块的情况。

Microsoft Word文档是结构化存储文件(本质上是文件中的文件系统)。MSDN开始解释Microsoft Word文档是结构化存储文件(本质上是文件中的文件系统)。MSDN开始解释它

谢谢你的链接。在我的问题(底部)中添加了一个更详细的解释:)非常感谢您的代码Khanzor。如果你感兴趣的话,我已经在我的主要问题中添加了几个问题:)谢谢你的链接。在我的问题(底部)中添加了一个更详细的解释:)非常感谢您的代码Khanzor。如果你感兴趣的话,我已经在我的主要问题中添加了几个问题:)谢谢tim jarvis,我可以问你一些关于你答案的后续问题吗?耶,谢谢!所以,用你的答案。。。当我想保存一个图像时,我是否只是把这个代码放在一个按钮点击事件中,当我想加载一个图像时,我是否把它放在另一个按钮点击事件中?这看起来很简单,但我有点困惑。(可能是因为我期望这样的任务如此复杂和乏味)?当然,作为一种扩展方法,您可以直接从位图调用它。。。string insertThis=myBitmap.ToBase64String()///文件编写代码,Xml或文本,只要添加这个字符串。您想要一个简短的端到端示例吗?给我发一封电子邮件到@.com.au,我会为你准备一些东西谢谢tim jarvis,我可以问你一些关于你答案的后续问题吗?是的,谢谢!所以,用你的答案。。。当我想保存一个图像时,我是否只是把这个代码放在一个按钮点击事件中,当我想加载一个图像时,我是否把它放在另一个按钮点击事件中?这看起来很简单,但我有点困惑。(可能是因为我期望这样的任务如此复杂和乏味)?当然,作为一种扩展方法,您可以直接从位图调用它。。。string insertThis=myBitmap.ToBase64String()///文件编写代码,Xml或文本,只要添加这个字符串。您想要一个简短的端到端示例吗?给我发一封电子邮件到@.com.au,我会为你做些事情