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 コアを使用してこの方法を高速化することで、これを高速化することです。

ps。私は自分の方法と並行して行うことができ、それが何もスピードアップしない場合、私は深刻ではありません。これを試して結果を記録したいだけです。ありがとうございます。

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 に答える