如何将字节数组转换为图像并使用某个进程打开它而不在磁盘上创建文件?

时间:2014-01-17 02:32:28

标签: c#

如何将Byte array转换为image并使用某些进程(例如Windows Photo Viewer)打开?

在这里我不想将数组数据转换为图像文件并将其保存在磁盘中,我想要做的是将字节数组转换为内存流或类似的东西并使用此我想要打开那个特定的图像。

有可能吗? (不要在图片框或者这样的东西中显示它们。)

1 个答案:

答案 0 :(得分:2)

除非是文件,否则您无法在外部查看器中打开它。但是,如果您不关心该文件,请使用临时文件:

public void ViewImage(Byte[] ImageBytes)
{
    try
    {
        Byte[] ba = new Byte[1];
        using (MemoryStream ms = new MemoryStream(ba))
        {
            Image img = Image.FromStream(ms);
            String tmpFile = Path.GetTempFileName();
            tmpFile = Path.ChangeExtension(tmpFile, "jpg");
            img.Save(tmpFile);
            if (File.Exists(tmpFile))
                Process.Start(tmpFile);  //Windows will use file association to open a viewer
        }
    }
    catch (OutOfMemoryException ex)
    {
        //React appropriately
    }
}

由于这会强制将图像保存为JPG,如果原始图像的类型很重要,则应添加更多逻辑来处理该事实。