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

本文关键字:对象 一起 图像 Parallel ForEach | 更新日期: 2023-09-27 18:31:35

现在我的方法是:

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

读完这篇文章后。而且我仍然感到困惑,找不到使用它的方法。

所以我的问题是如何在我的方法中使用Parallel.ForEach或并行任何东西。

我的目标是通过使用更多的 CPU 内核来加速这种方法,有什么建议吗?

附言。如果我可以用我的方法做并行并且不会加快任何事情,我并不认真我只想尝试这个并记录结果谢谢你的所有人.

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

只有当有多个图像时,才能使用并行处理。

想象一下,在每个

循环中浏览单独的图像,您可以这样做:

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

如果你真的想加快代码速度,你可以这样做:

            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;