2012-07-22 70 views
2

我试图生成一个系统,它在OpenCV中将图像写入,将其写入XML,从XML中读取,并将其显示在WPF应用程序的图像控件中。从XML文件导入图像

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

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

在此先感谢您的帮助 - 非常感谢。

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

+0

您不能只指望任何语言的Image类将字节流呈现为图像。二进制数据必须首先表示图像的二进制数据。你有2个选择:自己解析XML,并将其呈现为位图,或者拥有一个知道如何解析XML负载的控件,然后将该控件的DC呈现为位图。 – 2012-07-22 03:13:55

+0

@SimonWhitehead对不起,我没有关注。 XML数据确实代表图像 - 它是逐个像素的RGB值。我想知道的是如何将这个(解析的)数据转化为图像。 – JonaGik 2012-07-22 03:16:26

+1

y你不保存图像在'Base64'而不是那些像素。如果** OpenCV **不支持,那么你必须手动检索这些像素并使用'SetPixel'将它存储在'Bitmap'中或使用'指针'进行快速处理 – Anirudha 2012-07-22 03:27:07

回答

0

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

感谢您的帮助。

2

使用int cvSaveImage(const char* filename, const CvArr* image)save文件作为形象。图像格式选择基于文件扩展名

没有必要将其存储在XML如果你可以直接将其存储为图像文件。

.NET类需要一个Image.That。

注:

如果你想存储的红,绿,蓝值作为逗号分隔字符串,这将是非常低效的 .Save它Base64然后instead.You可以将其转换成字节,并喂它到任何.NET图像类。也可以使用.NET ImageConverter类。

0

您可以使用:

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