您的位置:程序门 -> java -> gui 设计



用swt实现的颜色拾取器,内存溢出问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


用swt实现的颜色拾取器,内存溢出问题
发表于:2007-08-02 10:53:15 楼主
我把该程序包括源代码发到我自己的博客上了
链接为:http://blog.csdn.net/talent_marquis/archive/2007/08/02/1722177.aspx

实现功能
1   自动对鼠标指定位置的颜色进行拾取
2   自动将颜色信息转换成网页用html颜色代码
3   有快捷键方便将颜色代码复制粘贴到html页面中
4   最多可以存储四个颜色到颜色格子中方便对比取用
5   在颜色格子上单击鼠标即可将颜色的html代码复制到剪贴板中方便取用
6   放大缩小鼠标所在位置附近的图像,以便更精确地取色(简易版已去除此功能)

有一个问题想请教:
我原本的非简易版是包括即时图像截取功能的,但因为无法释放截图图像占用内存,导致程序运行后占用内存会持续增加。

核心截图代码如下:

copy   code
try
{
        robot   =   new   robot();
        color   =   robot.getpixelcolor(   mousex,   mousey   );
        bi   =   robot.createscreencapture(   new   rectangle(   mousex-50,   mousey-50,   100,   100   )   );
        //控制图像缩放                                                
        bi   =   imageutil.scale(   bi,   scalenumber   );
}  
catch   (awtexception   e)
{
        //   todo   自动生成   catch   块
        e.printstacktrace();
}
//将截取图像转换成swt的image类                                                
imgdata   =   imageconvertor.getimagedata(   bi   );
//捕捉鼠标附近100*100象素大小范围的图像                                            
captureimg   =   new   image(   null,   imgdata   );

canvas.setbackgroundimage(   captureimg   );


后来经讨论得知这个问题很可能是因为“canvas.setbackgroundimage(   captureimg   );”这一句的缘故,导致截取的图像一层一层的叠加到canvas的背景层而不是替换,这样才会导致垃圾回收机制无法及时对已经被覆盖的图像进行垃圾回收。

对此,大家有什么好办法解决么?

就因为这个原因,我才对截图功能块进行了裁剪,做了一个简易颜色拾取器。
发表于:2007-08-03 22:59:011楼 得分:0
up
:)


快速检索

最新资讯
热门点击