我尝试并行化此 for for for循环,因为我想在 java 中使用并行流的代码STRONG>。问题是..每次我尝试这样做时,我都无法获得整个结果。我的意思是......这段代码应该以一定的角度旋转图像,但是如果我正在进行并行化,我只会收到一半图像旋转。
答案 0 :(得分:0)
一个问题可能是在for循环之外声明的a,b,xx,yy变量。可能是不同的(交错的)迭代会覆盖这些变量的值。例如,
答案 1 :(得分:0)
我认为这个实现存在一些问题。
1)来自parallelstream的每个线程都将覆盖另一个线程所做的ImageIo.write。
2)另外,forEach是无序的,所以你不知道哪一半会先发生。
我认为最好的办法是使用Stream API中的collect
方法。如果您需要帮助,我可以提供一些代码。但是,如果您在问题中给我一个可测试的代码,我将编写并行收集操作。否则,一切顺利。
修改强>
我做了一些检查,发现你的rotateImage
是罪魁祸首。该问题与parallelStream
无关。每个点(x1,y1)需要很多转换,现在对我来说代码太多了。您的算法应该注意以下事项:
一旦你完成了每个像素的所有翻译和旋转以及缓冲区的高度和宽度,在rotateImage函数中,我认为你可以在你的位置流上调用parallelStream函数,你就不会遇到问题。
像OpenGL这样的一些库可以让你更轻松。它们负责用旋转矢量和平移矢量旋转和平移中心周围的每个像素矢量。