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的生活,森日快乐~

  • 相关阅读:
    [转] MathType的灵活运用
    [zz] 模式识别,计算机视觉领域,期刊
    SQL语句 合并列值 将一列的多个值合并成一行
    目标板识别为U盘
    android 事件传递机制
    linux有关文件权限的命令
    linux中的jiffies变量
    分析Android 根文件系统启动过程(init守护进程分析)
    2010年暂订读书目录
    Android Power Management
  • 原文地址:https://www.cnblogs.com/jeniss/p/2999748.html
Copyright © 2011-2022 走看看