使用透明掩码将SWT图像保存到文件

4
这是我迄今为止的代码。
ImageLoader saver = new ImageLoader();
saver.data = new ImageData[]
    { toSave.getImageData() };
saver.save(fileName, SWT.IMAGE_PNG);
toSave是使用SWTResourceManager加载的图像,在程序中是透明的。fileName是一个字符串,表示我要保存图像的文件名(以.png结尾)。
结果是一张黑色背景的图片,而不是我想要的透明背景。如何使背景透明?我认为这与透明度掩码有关,但我可能错了。
提前致谢!

我的回答对你有用吗? - Baz
1个回答

6

SWTResourceManager 似乎是导致问题的原因。我不建议使用它。

尝试使用这段代码,它对我有效:

Display d = Display.getDefault();
Image image = new Image(d, "/pictures/Llama.gif");

ImageLoader saver = new ImageLoader();
saver.data = new ImageData[] { image.getImageData() };
saver.save("output.png", SWT.IMAGE_PNG);

image.dispose();

当你不再需要Image时,请记得处理它。


谢谢,我尝试过了,并且阅读了那篇文章。imageData.transparentPixel 不起作用,因为透明度类型是 SWT.TRANSPARENCY_MASK 而不是 SWT.TRANSPARENCY_PIXEL。我正在使用以下代码来检索图像:Image defaultLlama = SWTResourceManager.getImage(MainWindow.class, "/pictures/Llama.gif"); 然后将其存储在对象的 Image 字段中,并通过我现在使用的函数进行检索。 - connory3
SWT 不喜欢我调用 new Display() 构造函数(它抛出了一个 Invalid thread access SWT 错误)。相反,我使用了 Display.getDefault()。然后,它不接受我提供的文件路径(/pictures/Llama.gif 在类路径中,而不是绝对路径),所以我使用了位于 https://dev59.com/E2Yq5IYBdhLWcg3w0j8T 的解决方案。做完这些之后,它运行得非常好。谢谢! - connory3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接