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

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM