1

现在我的方法是:

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 核心来加快这种方法的速度来加快速度,有什么建议吗?

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

4

2 回答 2

3

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

想象一下,在 for each 循环中浏览单独的图像,您可以这样做:

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();
        }
    });
于 2013-09-17T17:24:05.047 回答
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;
于 2013-09-17T18:43:24.840 回答