我需要在 SWT Java 窗口中顯示 PNG 圖像,我使用的是 WindowBuilder 和 Eclipse。首先,我嘗試使用標簽和以下代碼:Label lblNewLabel = new Label(this, SWT.NONE); lblNewLabel.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, true, 1, 1)); Image image = new Image(display, "img/selae_mini.png"); lblNewLabel.setImage(image)它在 eclipse 中執行時有效,但是當我生成 jar 時,它不起作用。然后我在 stackoverflow 上發現您必須使用它ClassLoader.getSystemClassLoader().getResourceAsStream來獲取 a bufferedImage,然后您必須將其轉換bufferedImage為 a ImageData,最后將其轉換為 SWT Image。上帝之母。所以我嘗試了這個代碼:protected Image readImage(String path, Display display) { InputStream stream = ClassLoader.getSystemClassLoader().getResourceAsStream(path); BufferedImage bi = null; try { bi = ImageIO.read(stream); } catch (IOException e) { e.printStackTrace(); } finally { try { if (stream != null) stream.close(); } catch (IOException e) { e.printStackTrace(); } } return new Image(display, convertToSWT(bi));}public static ImageData convertToSWT(BufferedImage bufferedImage) { if (bufferedImage.getColorModel() instanceof DirectColorModel) { DirectColorModel colorModel = (DirectColorModel) bufferedImage.getColorModel(); PaletteData palette = new PaletteData( colorModel.getRedMask(), colorModel.getGreenMask(), colorModel.getBlueMask() ); ImageData data = new ImageData( bufferedImage.getWidth(), bufferedImage.getHeight(), colorModel.getPixelSize(), palette );現在的問題是我的 Image 是一個 png 文件,并且在執行 convertToSWT 方法的 IF 時,它得到的是該圖像有一個名為 #pixelBits 的 ColorModel,因此它在該方法上返回 null!我找不到有關如何解決此問題的任何信息我真的被這個簡單的事情困住了。任何幫助將不勝感激。
添加回答
舉報
0/150
提交
取消