积极答复者
双缓冲GDI+绘图方法中如何清除缓冲区中指定区域的图像?

问题
-
使用了双缓冲GDI+绘图方法,bufferImage是内存中的图像缓冲区。
先把backGround.jpg图片作为背景绘制到内存缓冲区buffuerImage中;然后再向buffuerImage中的指定区域绘制图片A.png,输出到屏幕。最后,我想用另外一张图片B.png绘制到bufferImage中和A相同的区域,去替换A。这里要求的是替换A,就像从来没有向bufferImage中绘制过A一样。
不能采用重新导入backGround.jpg,重新初始化bufferImage的办法,因为需要保留此时bufferImage的结果。我想到的最理想的办法是清除缓冲区中A所在区域的图像,不知道可以实现吗?如果可以怎么做?
谢谢指点!
答案
-
双缓冲就是在内存中预先画好图片。。既然是那样,每一步都在内存中做一份副本就是。
1. 画完 Ground.jpg, 做一份副本 Ground_copy.jpg
2. 画完 A.png, 又做一份副本 A.png
3. 要是想画 B.png 了,就拿 Ground_copy.jpg 出来,直接在上面画就是。
至于最终显示,随便挑一个你想要的图片显示就是。
学习学习....
嗯,不能直接赋值,要new一下。
但是这样做仍然没能彻底解决问题:因为用B替换A的动作,在我的程序中有很多,而且屏幕上有很多的B1、B2。。。分别需要去替换A1、A2。。。,我不可能每次替换之前都保存一个BufferImage,太耗内存了。
不知道有没有其它更好的办法?例如只需要保存所在的区域,因为相对于BufferImage来说,A、B的size都比较小。
那样就仅保存操作队列吧。把操作过程记录下来。每次有改动的时候就画一幅新的图片出来。
学习学习....- 已标记为答案 JSHZP 2011年7月6日 3:09
全部回复
-
双缓冲就是在内存中预先画好图片。。既然是那样,每一步都在内存中做一份副本就是。
1. 画完 Ground.jpg, 做一份副本 Ground_copy.jpg
2. 画完 A.png, 又做一份副本 A.png
3. 要是想画 B.png 了,就拿 Ground_copy.jpg 出来,直接在上面画就是。
至于最终显示,随便挑一个你想要的图片显示就是。
学习学习....
嗯,不能直接赋值,要new一下。
但是这样做仍然没能彻底解决问题:因为用B替换A的动作,在我的程序中有很多,而且屏幕上有很多的B1、B2。。。分别需要去替换A1、A2。。。,我不可能每次替换之前都保存一个BufferImage,太耗内存了。
不知道有没有其它更好的办法?例如只需要保存A所在的区域,因为相对于BufferImage来说,A、B的size都比较小。
-
双缓冲就是在内存中预先画好图片。。既然是那样,每一步都在内存中做一份副本就是。
1. 画完 Ground.jpg, 做一份副本 Ground_copy.jpg
2. 画完 A.png, 又做一份副本 A.png
3. 要是想画 B.png 了,就拿 Ground_copy.jpg 出来,直接在上面画就是。
至于最终显示,随便挑一个你想要的图片显示就是。
学习学习....
嗯,不能直接赋值,要new一下。
但是这样做仍然没能彻底解决问题:因为用B替换A的动作,在我的程序中有很多,而且屏幕上有很多的B1、B2。。。分别需要去替换A1、A2。。。,我不可能每次替换之前都保存一个BufferImage,太耗内存了。
不知道有没有其它更好的办法?例如只需要保存所在的区域,因为相对于BufferImage来说,A、B的size都比较小。
那样就仅保存操作队列吧。把操作过程记录下来。每次有改动的时候就画一幅新的图片出来。
学习学习....- 已标记为答案 JSHZP 2011年7月6日 3:09