2013-04-25 2 views
2

Это мой код до сих порСохранить SWT изображение в файл с прозрачностью Маска

ImageLoader saver = new ImageLoader(); 
saver.data = new ImageData[] 
    { toSave.getImageData() }; 
saver.save(fileName, SWT.IMAGE_PNG); 

toSave образ, который был загружен с помощью SWTResourceManager, который прозрачен в программе. fileName - это строка, представляющая файл. Я хочу сохранить изображение (заканчивается на .png).

Результат - изображение с черным фоном вместо прозрачного фона, который я хочу. Как сделать фон прозрачным? Я думаю, что это имеет какое-то отношение к маске прозрачности, но я могу ошибаться.

Заранее благодарен!

+0

Помог ли мой ответ для вас? – Baz

ответ

2

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, когда вам не нужно больше.

+0

Спасибо, я пробовал это, и я прочитал эту статью. 'imageData.transparentPixel' не работает, потому что тип прозрачности -' SWT.TRANSPARENCY_MASK', а не 'SWT.TRANSPARENCY_PIXEL'. Код, который я использую для извлечения изображения:' Image defaultLlama = SWTResourceManager.getImage (MainWindow.class , "/pictures/Llama.gif"); 'Затем он сохраняется в поле« Image »объекта и извлекается функцией, которую я использую прямо сейчас. – connory3

+0

@ connory3 Хорошо, обновил мой ответ. Попробуйте. – Baz

+0

SWT не понравилось, что я вызывал конструктор 'new Display()' (он выбрал ошибку SWT с недопустимым доступом к потоку. Вместо этого я использовал 'Display.getDefault()' Тогда он не принял путь к файлу, который я давал он (/pictures/Llama.gif был в пути класса, а не абсолютном пути), поэтому я использовал решение, расположенное в [http://stackoverflow.com/questions/14162100/convert-a-classpath-filename-to-a -real-filename] (http://stackoverflow.com/questions/14162100/convert-a-classpath-filename-to-a-real-filename) После этого он работал красиво. Спасибо! – connory3

Смежные вопросы