如何将Parallel.ForEach与图像对象一起使用?

时间:2013-09-17 17:18:08

标签: c# parallel-processing memorystream parallel.foreach

现在我的方法是:

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;
}

after read this。我仍然感到困惑,无法找到使用它的方法。

所以我的问题是如何使用Parallel.ForEach或将任何方法与我的方法并行。

我的目标是通过使用更多CPU核心来加速这种方法,以加快任何建议吗?

PS。我不认真,如果我可以与我的方法并行,而不是加速任何事情 我只是想尝试一下并记录结果谢谢你们所有人。

2 个答案:

答案 0 :(得分:3)

如果您有多张图片,则只能使用并行处理。

想象一下,你可以通过每个循环中的单独图像来执行此操作:

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

答案 1 :(得分:0)

如果你真的想加快你可以做的代码:

            BitmapData d = image.LockBits(new Rectangle(0, 0, image.Width, image.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
            int length = Math.Abs(d.Stride) * image.Height;
            byte[] buff = new byte[length]; 
            Marshal.Copy(d.Scan0, buff, 0, length);
            image.UnlockBits(d);

            return buff;