如何将 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(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;