4

我目前的代码是:

public static byte[] ImageToByte(Image img)
{

        byte[] byteArray = new byte[0];
        using (MemoryStream stream = new MemoryStream())
        {
            img.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp);
            stream.Close();
            byteArray = stream.ToArray();
        }


        return byteArray;
}

有什么办法可以使这项工作与多线程一起工作,或者使用我 CPU 的每个内核来使其更快?

4

3 回答 3

5

如果您要将多个图像转换为字节数组并且预先知道它们,那么您可以使用 Parallel.ForEach 循环并在那里完成此操作,以便它们可以在可用的不同内核中完成。但我不认为修改这种单一方法以使用多个内核值得付出努力并节省任何时间。

于 2013-09-17T14:37:03.887 回答
1

多线程是不可能的。这样做可能会损坏流。图像必须以零偏移量保存到流中。如果在保存图像之前已将任何其他数据写入流,则流中的图像数据将被损坏。

MSDN

于 2013-09-17T14:43:07.297 回答
-1

我不知道如何使它使用多个内核,但要使其成为线程安全的,您需要执行以下操作。首先声明一个私有静态对象

private static readonly Object _obj = new Object();

然后修改你的代码如下:

public static byte[] ImageToByte(Image img)
{
    lock(_obj)
    {
        byte[] byteArray = new byte[0];
        using (MemoryStream stream = new MemoryStream())
        {
            img.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp);
            stream.Close();
            byteArray = stream.ToArray();
        }

        return byteArray;
    }
}
于 2013-09-17T14:47:15.140 回答