猿问

如何在 java SWT 中显示 PNG 图像?

我需要在 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!我找不到有关如何解决此问题的任何信息


我真的被这个简单的事情困住了。任何帮助将不胜感激。


胡说叔叔
浏览 276回答 1
1回答
随时随地看视频慕课网APP

相关分类

Java
我要回答