zoukankan      html  css  js  c++  java
  • 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的生活,森日快乐~

  • 相关阅读:
    通过asp.net 生成xml文件
    listbox 多选处理
    girdview 找到其焦点的笨办法
    关于.net 中调用script的alert后 css失效的办法
    从数据库中读数据中寻找若隐若现的OOP
    Gitlab的安装部署和介绍
    守住你的网站:防御DDoS攻击指南
    分析SQL语句使用资源情况
    Linux下Sniffer程序的实现
    NDIS resources
  • 原文地址:https://www.cnblogs.com/jeniss/p/2999748.html
Copyright © 2011-2022 走看看