У меня есть несколько прозрачных экземпляров BufferedImage
, которые я хотел бы сложить друг на друга (так же, как слои Photoshop) и испечь в один вывод BufferedImage
. Как мне это сделать?Layer multiple BufferedImages поверх друг друга?
ответ
Я бы сказал, что лучше всего взять буферизованные изображения и создать дополнительный, чтобы иметь объект для добавления. Затем просто используйте Graphics.drawImage(), чтобы поместить их друг на друга.
Так что-то вдоль этих линий:
BufferedImage a = ImageIO.read(new File(filePath, "a.png"));
BufferedImage b = ImageIO.read(new File(filePath, "b.png"));
BufferedImage c = new BufferedImage(a.getWidth(), a.getHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics g = c.getGraphics();
g.drawImage(a, 0, 0, null);
g.drawImage(b, 0, 0, null);
Давайте представим, что первый BufferedImage назван Bi1 и второй Bi2, в то время как изображение, которое вы хотите, чтобы слой их на это цель.
BufferedImage target=new BufferedImage(width,height,BufferedImage.TYPE_INT_ARGB);
Graphics2D targetGraphics=target.createImage();
targetGraphics.drawImage(bi1,0,0,null);//draws the first image onto it
int[] pixels2=((DataBufferInt) bi2.getRaster().getDataBuffer()).getData();
int[] pixelsTgt=((DataBufferInt) target.getRaster().getDataBuffer()).getData();
for(int a=0;a<pixels2.length;a++)
{
pixelsTgt[a]+=pixels2[a];//this adds the pixels together
}
Убедитесь, что все три объекта BufferedImage имеют TYPE_INT_ARGB так, что альфа включен. Это может не дать вам точных результатов, которые вы хотели, если два добавленных вместе больше максимального числа, поэтому вы можете добавить что-то, чтобы помочь исправить это. Пиксели используют битовые сдвиги для добавления к цветам с целым числом, упорядоченным как AARRGGBB.
Также рассмотрите режимы AlphaComposite
, доступные для графического контекста, обсуждаемые here.
- 1. Span поверх друг друга
- 2. leafleft/маркеры MapBox укладывают поверх друг друга
- 3. изотопные элементы, отображающие поверх друг друга
- 4. Qt неправильно лежит виджеты поверх друг друга
- 5. BitBlt два изображения поверх друг друга
- 6. R - стек несколько Heatmap поверх друг друга
- 7. Span отображается поверх друг друга, когда упаковка
- 8. Вызов фрагмента поверх ViewPager перекрывает друг друга
- 9. d3.js создавать объекты поверх друг друга
- 10. laravel multiple select statement переписывает друг друга
- 11. Netlogo multiple patch layer
- 12. Layer multiple components in JFrame
- 13. Отображение перекрытия BufferedImages в Java
- 14. Pie сюжет получает свой текст поверх друг друга
- 15. Добавить 2 UILabels в UINavigationBar titleView поверх друг друга
- 16. Babylonjs загружают два изображения поверх друг друга, второе изображение прозрачно
- 17. Android Holo Диалог имеет 2 фонов слоистые поверх друг друга
- 18. Как сделать видеоролики в массиве Стек поверх друг друга?
- 19. Поплавок две дивы справа, один поверх друг друга
- 20. Flexbox элемент укладки поверх друг друга IE 10
- 21. Выравнивание 2 HTML элементы, центрирование их поверх друг друга
- 22. Render layer поверх графического контекста
- 23. Разместите виджеты друг на друга
- 24. Отображение фрагментовDialogs ниже друг друга
- 25. Layer говорить друг с другом в JavaEE
- 26. Укладка разделов друг на друга
- 27. Четыре объекта datetimes, касаясь друг друга/наложения друг на друга
- 28. ИОС Cutom TableView клеток подтаблицы друг друга перекрывающихся друг друга
- 29. Два холста друг на друга в Fabric.js
- 30. Процессы, отслеживающие друг друга
Я не нашел 'Graphics метод # draw'. Я использовал 'Graphics # drawImage'. – creemama
Ничего себе! Я не могу поверить, что вы первый человек, который указал это после всего этого времени. Я обновлю ответ, чтобы он не заставлял других заблуждаться. –