为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

胡说叔叔 2021-07-16 18:27:10
我需要在 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!我找不到有关如何解决此问题的任何信息我真的被这个简单的事情困住了。任何帮助将不胜感激。
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 275 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信