关于java Applet 双缓冲技术显示图片的疑问

画红色框的为我带有疑问的内容。疑问:1.根据API帮助文档,关于getGraphics()的方法解释为:【getGraphics()此方法返回Graphics2D,但此处... 画红色框的为我带有疑问的内容。
疑问:
1.根据API帮助文档,关于getGraphics()的方法解释为:
【getGraphics() 此方法返回 Graphics2D,但此处是出于向后兼容性的考虑。】
这句话怎么理解?这个BufferImage有什么用?

2.最后一个红色框中,在绘图paint()方法中,明明是BufferGraphics在进行绘图,为什么最后还要加上一个g.drawImage(BufferImage,0,0,this)?我看在两个红色方框之间并没有再次对BufferImage进行操作,那么这里再次将BufferImage绘出,不就相当于初始值null,也就是空图了?但是我将这一行注释掉,却什么都显示不出来了。
展开
 我来答
月光雪松
2015-09-07 · TA获得超过476个赞
知道小有建树答主
回答量:338
采纳率:100%
帮助的人:233万
展开全部
1, Graphics2D 相比Graphics功能更强大,以后用这个功能强大。所以是向后兼容;
BufferImage 就是缓冲图片,作用就是缓冲。先把图形绘制到BufferImage,然后把整张图片BufferImage直接显示出来。好比在食堂吃饭的时候,BufferImage相当于一个大托盘,这个大托盘里面装了几十碗(碟)小菜, 小二上菜的时候直接把这个大托盘一次端到客人桌子上就好了,只跑一次,效率高,速度快啊。BufferImage就起一个缓冲作用。

2、BufferGraphics 只是把图形绘制到 BufferImage 这张图片里,但这张图片只是在内存里,并没有显示出来。
g.drawImage(BufferImage,0,0,this) 这一句才把整张图片显示出来(店小二才把掌托盘菜端上桌),不调用就不显示图片(没有端出来,装满菜的托盘还在厨房呢,客人当然没菜吃!)。

BufferImage 最开始确实为空,但是applet在显示之前会先做初始化,也就是会执行init()方法。很显然init()方法里调用了createImage(***)这个方法来初始化BufferImage。后面显示出来的时候BufferImage当然就不为空了。

明白了吧!!!
更多追问追答
追问
意思是"BufferGraphics=BufferImage.getGraphics();"的作用是使对象BufferGraphics直接在BufferImage上绘图吗,可赋值语句不是单向的吗,这里仅仅是BufferImage创建了一个Graphics对象,但是后面并没有再次出现针对BufferImage的操作,那么BufferImage也应该一直是初始化之后的值了啊?
追答
BufferGraphics=BufferImage.getGraphics();这相当于拿到BufferImage这图片的画布和笔,后面用BufferGraphics这个绘制图形的时候就是针对BufferImage来说滴。绘制的图像就在BufferImage这上面咯
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式