Graphics2D 的一个问题 Graphics2D paint技术能擦除上一步操作吗?例如:在一个图片上drawString()后,再drawString()则会和之前绘制的string叠加,所以我想回滚上一步操作。我发现不能用clearRect(),因为擦除区域后,背景颜色是单一的,显然没达到擦除上一步paint操作的目的。2dString图片技术 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 BufferedImage 应该不可以,它就是一个二维数组,只有“一层”。 那怎么办,只想擦除上一次绘制的string 你应该用 MVC 的思想去设计思路可以是这个样子的:记住你每一步绘制的数据模型(可能是字符、可能是图形。当然,这些字符、图形的具体坐标、大小、颜色、等等也应当保存住)然后形成一个 list在绘制的时候,根据这个 list 中的模型去绘制视图你如果想“删除”其中的某一次绘制,只要在这个 list 中移除某一个数据然后 repaint 就能实现界面上的擦除了 可以,算是一种可行的办法,但是每次都要完全repaint不知效率如何, 还是可以设置clip提高效率?:List list = new LinkedList();public void initList() { list.add(image); list.add(string);}public void renderSplash() { list.remove(string); list.add(newString); Rectangle clip = bound; g2.setClip(clip); repaint();}public void repaint() { for(Object element : list) { if(element instanceof Image) g2.drawImage(...); else if(element instanceof String) g2.drawString(...); }}随便在这帖子上手敲的,关键是想知道这样的clip对draw有效吗 记住每个“模型”的 bounds,然后在单步“擦除”的时候去通过 clip 限制绘制区域的确在某些情况下,可以减少绘制负担但是,如果你的 clip 中,与很多别的“模型”有重叠区域那么,在调用绘制算法的时候你依然必须把这些模型的绘制算法都调用一次才能实现完美的绘制如果大量的模型有部分区域在 clip 中,而又有部分区域在 clip 外其实,g2d 内部也得通过某些算法去进行判断(它要不断的判断,该步绘制中:哪些区域是需要绘制的,哪些区域又无需绘制)如果这样的情况过多,反而会加重算法负担最终表现出现的绘制效率,可能会反而不如直接将全图进行绘制最后,说一个著名的结论:一切通过理论得出的效率优劣都是浮云你只有通过实测对比,才能证明究竟哪一种绘制方式更适合你的程序(可以通过计算:不同算法绘制前后的时间差,来进行对比) 记住每个“模型”的 bounds,然后在单步“擦除”的时候去通过 clip 限制绘制区域的确在某些情况下,可以减少绘制负担但是,如果你的 clip 中,与很多别的“模型”有重叠区域那么,在调用绘制算法的时候你依然必须把这些模型的绘制算法都调用一次才能实现完美的绘制如果大量的模型有部分区域在 clip 中,而又有部分区域在 clip 外其实,g2d 内部也得通过某些算法去进行判断(它要不断的判断,该步绘制中:哪些区域是需要绘制的,哪些区域又无需绘制)如果这样的情况过多,反而会加重算法负担最终表现出现的绘制效率,可能会反而不如直接将全图进行绘制最后,说一个著名的结论:一切通过理论得出的效率优劣都是浮云你只有通过实测对比,才能证明究竟哪一种绘制方式更适合你的程序(可以通过计算:不同算法绘制前后的时间差,来进行对比)好的 真心谢谢讲解啊 书上的例子,帮解释下,谢啦 记事本的保存功能怎么用JAVA实现(请不要把另存为的功能看成和保存功能一样) java执行错误 线程中使用 javax.swing.Timer的问题 谁能够给我解释一下?为什么我的代码会这样?图片的流存储问题! 在win98下安装JDK时的自动设置 一个简单的问题,Java编程思想(2nd)里的。 与数据库的连接问题 选课了!大家给意见。给分!! String类的特点 求大神,菜鸟一枚 一个关于Client端和Server端的问题
记住你每一步绘制的数据模型(可能是字符、可能是图形。当然,这些字符、图形的具体坐标、大小、颜色、等等也应当保存住)
然后形成一个 list
在绘制的时候,根据这个 list 中的模型去绘制视图你如果想“删除”其中的某一次绘制,只要在这个 list 中移除某一个数据
然后 repaint 就能实现界面上的擦除了
list.add(image);
list.add(string);
}public void renderSplash() {
list.remove(string);
list.add(newString);
Rectangle clip = bound;
g2.setClip(clip);
repaint();
}public void repaint() {
for(Object element : list) {
if(element instanceof Image)
g2.drawImage(...);
else if(element instanceof String)
g2.drawString(...);
}
}随便在这帖子上手敲的,关键是想知道这样的clip对draw有效吗
记住每个“模型”的 bounds,然后在单步“擦除”的时候去通过 clip 限制绘制区域
的确在某些情况下,可以减少绘制负担
但是,如果你的 clip 中,与很多别的“模型”有重叠区域
那么,在调用绘制算法的时候
你依然必须把这些模型的绘制算法都调用一次才能实现完美的绘制如果大量的模型有部分区域在 clip 中,而又有部分区域在 clip 外
其实,g2d 内部也得通过某些算法去进行判断
(它要不断的判断,该步绘制中:哪些区域是需要绘制的,哪些区域又无需绘制)
如果这样的情况过多,反而会加重算法负担最终表现出现的绘制效率,可能会反而不如直接将全图进行绘制最后,说一个著名的结论:
一切通过理论得出的效率优劣都是浮云
你只有通过实测对比,才能证明究竟哪一种绘制方式更适合你的程序
(可以通过计算:不同算法绘制前后的时间差,来进行对比)
记住每个“模型”的 bounds,然后在单步“擦除”的时候去通过 clip 限制绘制区域
的确在某些情况下,可以减少绘制负担
但是,如果你的 clip 中,与很多别的“模型”有重叠区域
那么,在调用绘制算法的时候
你依然必须把这些模型的绘制算法都调用一次才能实现完美的绘制如果大量的模型有部分区域在 clip 中,而又有部分区域在 clip 外
其实,g2d 内部也得通过某些算法去进行判断
(它要不断的判断,该步绘制中:哪些区域是需要绘制的,哪些区域又无需绘制)
如果这样的情况过多,反而会加重算法负担最终表现出现的绘制效率,可能会反而不如直接将全图进行绘制最后,说一个著名的结论:
一切通过理论得出的效率优劣都是浮云
你只有通过实测对比,才能证明究竟哪一种绘制方式更适合你的程序
(可以通过计算:不同算法绘制前后的时间差,来进行对比)好的 真心谢谢讲解啊