编辑两个
为了防止snarky评论和单行答案缺少点:IFF就像调用setDoubleBuffered(true)一样简单,那么如何访问当前的脱机缓冲区,以便我可以开始混乱BufferedImage的底层像素数据?
我花了时间写一段经典的代码(看起来也很有趣),所以我真的很感激答案实际上回答(令人震惊的是)我的问题,并解释什么/这是如何工作,而不是一个人和snarky注释 😉
这是一个工作的代码,在JFrame中弹出一个正方形.我想知道可以用来转换这段代码的各种方法,以便它使用双缓冲.
请注意,我清除屏幕并重绘广场的方式不是最有效的,但这真的不是这个问题(在某种程度上,为了这个例子更好,它有点慢).
基本上,我需要不断地修改一个BufferedImage中的很多像素(因为有某种动画),而且我不希望在屏幕上看到单缓冲的视觉工件.
我有一个JLabel,它的Icon是一个ImageIcon,包含一个BufferedImage.我想修改BufferedImage.
需要做些什么来做这个双重缓冲?
我明白,当我将绘制“图像2”时,将会显示“图像1”.但是,一旦我完成了“图像2”的绘制,我如何“快速”将“图像1”替换为“图像2”?
这是我应该手动做的,就像说,通过交换JLabel的ImageIcon自己?
我应该总是在相同的BufferedImage中绘制,然后在JLabel的ImageIcon的BufferedImage中做一个BufferedImage的像素的快速“blit”? (我猜没有,我看不到我可以用显示器的“垂直空白行”[或等同于平面屏幕“同步”我的意思是“同步”,而不会干扰显示器本身刷新的时刻像素,以防止剪切]).
“重绘”订单怎么办?我想是自己触发这个吗?哪个/我什么时候应该调用repaint()或其他东西?
最重要的要求是我应该直接在图像的