• SWT中显示图片并随窗口改变其大小


    在SWT中,用setBackgroundImage函数显示背景图片是用平铺的方式,并且不能改变其大小。为了可以显示图片,并且使图片随着View大小的改变而变化,这可以选择控件的addPaintListener方法,通过添加这个事件来画图像。

    首先,获取image,获取org.eclipse.swt.widgets.Image的方式有两种:

    1、使用绝对路径

    Image image = new Image(Display.getDefault(),"D:/1.jpg");


    2、使用相对路径

    ImageDescriptor imageDescriptor = AbstractUIPlugin.imageDescriptorFromPlugin(pluginId, "SystemData/1.jpg");
    Image image = imageDescriptor.createImage();

    //SystemData/1.jpg:指的在工程的根目录下的SystemData文件夹内的1.jpg

    然后,可以将这个jpg的图片在org.eclipse.swt.widgets.Canvas中绘出,或者是org.eclipse.swt.widgets.Label中绘出。实验之后,发现在Label中绘制时,其大小随View窗体改变的时候,会出现图片只有边缘改变,而其他部分不会改变的情况。所以这是我用的的Canvas。

    final int imgWidth = image.getBounds().width;
    final int imgHeight = image.getBounds().height;
    Canvas canvas = new Canvas(parent, SWT.DOUBLE_BUFFERED);
    canvas.addPaintListener(new PaintListener() {
          @Override
          public void paintControl(PaintEvent event) {
              // TODO Auto-generated method stub
              event.gc.drawImage(image, 0, 0, imgWidth, imgHeight, 0, 0, event.width, event.height);
         }
    });

    在处理图片闪烁时,将canvas设置为了SWT.DOUBLE_BUFFERED样式,则这样就可以使用双缓冲区,消除在图片在redraw时的闪烁。(双缓冲区的其中一种实现机制:首先把背景色和其他内容保存在一幅图形当中,当收到重新绘图的时候,将整个图形设置到需要重画的区域

    p.s. 小菜一枚,如果有什么不对的地方,请指出来啊。

    p.s. 恭喜Bunny马上就要结束2的生活,森日快乐~

  • 相关阅读:
    centos7 安装 nginx
    centos 关闭防火墙
    springcloud + nacos + mybatis ,增加seata分布式事务
    docker 运行 seata-server 配置nacos
    分布式事务4种方式,通俗易解篇
    主键字段报错doesn't have a default value (mybatis)
    模拟部署一个前后端分离的项目
    nginx配置接口转发路径
    前端部署后出现白板异常
    nodeJs的升降级(win10下)
  • 原文地址:https://www.cnblogs.com/jeniss/p/2999748.html
Copyright © 2020-2023  润新知