0

我正在尝试使用下面的代码对图像进行并行化操作,但出现One or more errors occurred错误。

查看内部异常,我可以看到发生了错误{"Object is currently in use elsewhere."}

注意:CoverImageSecretImageBitmaps

 Parallel.For(0, CoverImage.Width, x =>
            {
                for (int y = 0; y < CoverImage.Height; y++, SecretImageHeight++)
                {
                    Color coverImagesPixel = CoverImage.GetPixel(x, y);
                    Color secretImagesPixel = SecretImage.GetPixel(SecretImageWidth, SecretImageHeight);

                    int r = (coverImagesPixel.R & coverImageMask) + ((secretImagesPixel.R >> shift) & secretImageMask);
                    int g = (coverImagesPixel.G & coverImageMask) + ((secretImagesPixel.G >> shift) & secretImageMask);
                    int b = (coverImagesPixel.B & coverImageMask) + ((secretImagesPixel.B >> shift) & secretImageMask);

                    StegoImage.SetPixel(x, y, Color.FromArgb(255, r, g, b));
                }
                SecretImageHeight = 0;
                SecretImageWidth++;
            }
            );

我尝试使用这样的互斥锁:

mutex.WaitOne();
StegoImage.SetPixel(x, y, Color.FromArgb(255, r, g, b));
mutex.ReleaseMutex();

但仍然无济于事(我得到同样的错误)。

4

1 回答 1

2

看起来您正在尝试使用来自非 UI 线程的图像 API。这是个坏主意。

我建议您将图像复制到 UI 线程上的字节数组,然后运行您的并行 for 循环,这将改变数组,然后从字节数组重新创建图像。

于 2015-06-18T14:09:33.443 回答