Java 如何有效地查找Graphics2D渲染错误?
您能建议一种从调试器中识别呈现错误源的方法吗 Misko Hevery将缺陷分为三类:Java 如何有效地查找Graphics2D渲染错误?,java,swing,debugging,netbeans,graphics2d,Java,Swing,Debugging,Netbeans,Graphics2d,您能建议一种从调试器中识别呈现错误源的方法吗 Misko Hevery将缺陷分为三类: 合乎逻辑 接线 渲染 很明显,我的问题是一个渲染错误 我有一个Swing应用程序,它的面板包含多个层。渲染所有层可能需要大量时间,因此应用程序使用线程池将层和分片从层渲染到BuffereImage。当事件调度线程渲染面板时,最新渲染的缓冲区图像将被绘制到屏幕上 此设置已充分执行 新功能要求特定图层类型支持透明度。有些东西,有些地方不能保持透明度。错误可能在许多地方,可能在要渲染的对象的实现中,也可能在脱机
- 合乎逻辑
- 接线
- 渲染
您会怎么做?您可以将您的方法与所示的清除缓冲区的方法进行比较:
g2d.setComposite(AlphaComposite.Clear);
g2d.fillRect(0, 0, w, h);
在最坏的情况下,您可以在可以访问
图像的点中断,并在表达式image.getRGB(0,0)
上设置一个手表,显示设置为十六进制。高阶字节是alpha
值:FF
是不透明的,00..FE
表示不同的透明度。您为buffereImage
指定的类型是什么?实现这一点并不容易,我会首先减少渲染的层数,并允许检查每一层。我可能会把一些写在磁盘上,我甚至可以考虑看一下,@ MadProgrammer有很多缓冲区,但是它们都是这样创建的:代码>缓冲区MFBuffeDime=新的缓冲区((int)d GigWithTh),(int)d GeTeAuthe(),BuffeReimdia.Type In IsAgARB);代码>您的第一个建议-我将其解释为“寻找偏离已知工作模式的代码”是一个很好的建议。问题是有相当多的棘手代码需要检查。我相信你的第二个建议本质上是“不要检查整个图像。注意单个已知像素的透明度。”我认为对于我的情况,这是一个更好的建议。对;您需要根据图像推断要检查的角点;当您捕捉到坏帧时,您可能会发现试图使用不透明颜色和/或错误模式进行清除。