我需要在 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!我找不到有关如何解决此问题的任何信息
我真的被这个简单的事情困住了。任何帮助将不胜感激。
相关分类