我目前正在编写 Fractal Explorer 程序,但遇到了一个非常奇怪的问题:我在 BufferedImage 上绘制分形,并且在该图像中随机出现黑色区域。截图:http: //imgur.com/a/WalM7
图像是多线程计算的:大图像被分成四个(因为我有一个四核处理器)单独计算的子图像。黑色区域出现在每个子图像的开头。它们总是矩形的,不一定按照像素的计算顺序(从左到右,但该区域并不总是延伸到子图像的远端)。
我已经验证,在绘制像素后(使用 Graphics.drawLine),BufferedImage.getRGB 立即返回像素的正确颜色,但在计算完成后,它可以返回黑色,因为像素是在屏幕上绘制的。
如果我禁用多线程计算(通过任务管理器仅将一个内核分配给 javaw.exe),问题似乎消失了,但我真的不想放弃多核计算。有没有其他人遇到过这个问题(我没有通过谷歌和stackoverflow找到任何东西),你知道如何解决吗?
Graphics.drawLine 调用在 Graphics 对象上同步;如果我另外在 BufferedImage 上同步它,则没有任何变化。
如果您想亲自查看该错误,您可以在http://code.lucaswerkmeister.de/jfractalizer/下载该程序。它也可以在 GitHub (https://github.com/lucaswerkmeister/JFractalizer) 上找到,但我最近才切换到 GitHub,并且在第一次 GitHub 提交中问题已经很明显了。