我有多个透明的BufferedImage
实例,我想将它们叠加在一起(也称为Photoshop图层)并烘烤成一个BufferedImage
输出。我该怎么做呢?将多个BufferedImages层叠在一起?
3
A
回答
10
我会说最好的选择是采取缓冲的图像,并创建一个额外的一个为了有一个对象追加。然后只需使用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);
1
让我们假设第一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,以便启用alpha。如果两者加在一起超过最大整数,这可能不会给你准确的结果,所以你可能想添加一些东西来帮助解决这个问题。像素使用位移来添加颜色,并将整数排列为AARRGGBB。
2
同样考虑可用于图形上下文的AlphaComposite
模式,讨论here。
相关问题
- 1. CSS帮助创建一个框,我有层叠在一起
- 2. Java Netbeans:如何将面板层叠在一起?
- 3. 在java中使用多个bufferedImages
- 4. Hibernate层叠在一对多的映射
- 5. Python:如何将多个阵列堆叠在一起沿新轴
- 6. 如何使用的ImageIO多个BufferedImages保存到一个文件
- 7. 我如何将图像层叠在另一层上
- 8. 如何将NinjectModule与Ninject.MVC和多个图层一起使用?
- 9. 将弹性物品堆叠在一起
- 10. 将swf文件堆叠在一起
- 11. 从BufferedImages中写入一个动画gif
- 12. 将多个列堆叠成一列
- 13. 使用CSS和z-index创建页面叠加层,然后将一个元素放置在叠加层顶部
- 14. 无法将多个div水平堆叠在一起而不浮动?
- 15. 将多个项目合并在一起
- 16. Rails将多个表连接在一起
- 17. 将多个MSM Statemachines连接在一起
- 18. 将多个文件编译在一起?
- 19. 将多个QPixmaps拼接在一起
- 20. 将多个if语句加在一起
- 21. 将多个行分组在一起
- 22. Javascript - 将多个NodeLists连接在一起
- 23. 将多个PNG粘合在一起
- 24. 将多个类连接在一起?
- 25. 将多个图像放在一起
- 26. SQL将多个“计数”加在一起
- 27. 将多个表单串联在一起?
- 28. flex 4 - 在另一个顶层上叠加一个组件?
- 29. Android - 如何在另一个叠加层的onTap动作中显示另一个叠加层
- 30. 将BufferedImages绘制到另一个BufferedImage的最快方法
我没有找到'Graphics#draw'方法。我用'Graphics#drawImage'。 – creemama
哇!我不能相信你是第一个在这段时间后指出这一点的人。我会更新答案,以免引起其他人误入歧途。 –