您的位置:首页 > 其它

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

2013-04-04 23:46 239 查看
在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的生活,森日快乐~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: