【问题标题】:Importing an Image from an XML File从 XML 文件导入图像
【发布时间】:2012-07-22 03:08:41
【问题描述】:

我正在尝试创建一个系统,该系统在 OpenCV 中获取图像,将其写入 XML,从 XML 中读取,然后将其显示在 WPF 应用程序的图像控件中。

我遇到的问题是我不清楚 .NET 类(例如 BitmapImage)如何处理来自字节数组的图像。我尝试了多种方法并得到了各种错误 - 太多了,除非需要,否则无法发布。

我想知道是否有人可以为我指出正确的方向?我想知道的是,数据需要如何呈现给 .NET 对象才能在 Image 控件中显示?

提前感谢您的帮助 - 非常感谢。

编辑:我希望我需要做的是将 XML 转换为字节数组并使用它以及格式的定义来实例化 BitmapImage 对象或等效于用作 Image 控件的源。我不确定如何做到这一点。

【问题讨论】:

  • 您不能期望任何语言的 Image 类将字节流呈现为图像。二进制数据必须首先表示图像的二进制数据。您有 2 个选项:自己解析 XML,并将其呈现为位图,或者,拥有一个知道如何解析 XML 加载的控件,然后将该控件的 DC 呈现为位图。
  • @SimonWhitehead 对不起,我不关注。 XML 数据确实代表了一个图像——它是逐像素的 RGB 值。我想知道的是如何将(解析的)数据转换成图像。
  • 你不要将图像保存在Base64 而不是那些pixels。如果 OpenCV 不支持,那么你必须手动检索这些像素并存储在Bitmap 中使用SetPixel 或使用pointers 进行快速处理
  • 您能否在原始帖子中展示您的 XML 示例?
  • @SimonWhitehead XML 本身并不重要——我可以根据需要进行更改。我想知道的是我应该使用哪些 .NET 类以及它们希望如何呈现数据 - 我可以呈现它们,但它们需要它。

标签: c# .net opencv


【解决方案1】:

使用int cvSaveImage(const char* filename, const CvArr* image)save文件作为图像。图像格式是根据文件扩展名选择的

如果可以直接存储为Image文件,则无需存储在XML中。

.NET 类需要一个 Image。就是这样。

注意:

如果您想将红色、绿色、蓝色值存储为逗号分隔的字符串,那将非常效率低下。请将其保存在 Base64 中。然后您可以将其转换为字节并提供给它到任何 .NET 图像类。此外 .NET ImageConverter 类可能会很有帮助。

【讨论】:

    【解决方案2】:

    我发现问题是(大概)我在编写 XML 数据之前没有对其进行 Base64 编码。因此,解决方案是在写入 XML 之前对数据进行 Base64 编码,在另一端对其进行 Base64 解码,将数据作为字节数组读取并使用它来实例化 MemoryStream 和 BitmapImage 对象。

    感谢大家的帮助。

    【讨论】:

      【解决方案3】:

      你可以使用:

      public static BitmapSource Create(
          int pixelWidth,
          int pixelHeight,
          double dpiX,
          double dpiY,
          PixelFormat pixelFormat,
          BitmapPalette palette,
          Array pixels,
          int stride
      )
      

      【讨论】:

        猜你喜欢
        • 2011-06-29
        • 2011-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-31
        • 1970-01-01
        • 2017-08-21
        相关资源
        最近更新 更多