С Image<,>
Я думаю, что это происходит настолько быстро, насколько это возможно без работы с небезопасным кодом и указателями.Быстрое ускорение может привести к параллельному запуску внешнего цикла следующим образом:
Parallel.For(0, imageHeight, y =>
{
for (int x = 0; x < imageWidth; x++)
{
// The Blue frame
imageAcos.Data[y, x, 0] = Method(image.Data[y, x, 0]);
// The Green frame
imageAcos.Data[y, x, 1] = Method(image.Data[y, x, 1]);
// The Red frame
imageAcos.Data[y, x, 2] = Method(image.Data[y, x, 2]);
}
});
Зависит ли это от ускорения, зависит от размера изображения, поэтому обязательно проверьте это с изображениями.,И он будет использовать все ваши ядра ЦП, которые вам могут не понадобиться.
Более простой / компактный способ сделать это - использовать встроенный метод Convert.
Image<Bgr, float> imageAcos = image.Convert(p => (float)Math.Acos((double)p));
Это не можетраспараллеливается как for-loop, но должен быть примерно таким же быстрым, как ваша текущая реализация.
Кстати, я вполне уверен, что ваши x и y в неправильном порядке в Data [].