java绘图合并图像AlphaComposite模式测试
本篇文章给大家带来的内容是关于java绘图合并图像AlphaComposite模式测试,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
package com.hdwang.test; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.awt.image.BufferedImage; import java.util.HashMap; import java.util.Map; /** * Created by hdwang on 2018/10/11. */ public class TestDrawing { public static void main(String[] args) { testComposite(); } /** * 合成测试 */ public static void testComposite() { //创建背景图片(带透明分量的) BufferedImage bg = new BufferedImage(300, 300, BufferedImage.TYPE_INT_ARGB); Graphics2D bgGraphics = (Graphics2D) bg.getGraphics(); bgGraphics.setColor(Color.yellow); //设置颜色 bgGraphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); //边缘抗锯齿 bgGraphics.fillRect(0, 0, bg.getWidth(), bg.getHeight()); //填充矩形 bgGraphics.setColor(Color.BLACK); bgGraphics.setFont(new Font("楷体", Font.ITALIC, 50)); bgGraphics.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); //文本抗锯齿 bgGraphics.drawString("背景黄色", 50, 150); //画文本 bgGraphics.dispose(); //创建第二张图片 BufferedImage image = new BufferedImage(300, 300, BufferedImage.TYPE_INT_ARGB); Graphics2D imageGraphics = (Graphics2D) image.getGraphics(); imageGraphics.setColor(Color.GREEN); imageGraphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); imageGraphics.fillRoundRect(0, 0, image.getWidth(), image.getHeight(), image.getWidth(), image.getHeight()); imageGraphics.setColor(Color.BLACK); imageGraphics.setFont(new Font("楷体", Font.ITALIC, 50)); imageGraphics.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); imageGraphics.drawString("前景绿色", 50, 200); imageGraphics.dispose(); JFrame jf = new JFrame(); //窗体 JPanel contentPanel = new JPanel(); //内容面板 contentPanel.setBorder(BorderFactory.createLineBorder(Color.blue)); //设置边框 //contentPanel.setLayout(new BorderLayout()); JLabel label = new JLabel(); label.setText("组合模式:"); contentPanel.add(label); JComboBox comboBox = new JComboBox(); comboBox.addItem("默认"); comboBox.addItem("CLEAR"); comboBox.addItem("SRC"); comboBox.addItem("DST"); comboBox.addItem("SRC_OVER"); comboBox.addItem("DST_OVER"); comboBox.addItem("SRC_IN"); comboBox.addItem("DST_IN"); comboBox.addItem("SRC_OUT"); comboBox.addItem("DST_OUT"); comboBox.addItem("SRC_ATOP"); comboBox.addItem("DST_ATOP"); comboBox.addItem("XOR"); contentPanel.add(comboBox); jf.setContentPane(contentPanel); //窗体设置内容面板为jp jf.setBounds(200, 200, 500, 500); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setVisible(true); //窗体可见 DrawingPanel drawPanel = new DrawingPanel(); drawPanel.setBounds(0,35,500,440); drawPanel.setPreferredSize(new Dimension(500,440)); drawPanel.setBorder(BorderFactory.createLineBorder(Color.red)); //设置边框 drawPanel.setBg(bg); drawPanel.setImage(image); // drawPanel.setAlphaComposite(AlphaComposite.SrcAtop); contentPanel.add(drawPanel); Map<String,AlphaComposite> compositeMap = new HashMap<>(); compositeMap.put("CLEAR",AlphaComposite.Clear); compositeMap.put("SRC",AlphaComposite.Src); compositeMap.put("DST",AlphaComposite.Dst); compositeMap.put("SRC_OVER",AlphaComposite.SrcOver); compositeMap.put("DST_OVER",AlphaComposite.DstOver); compositeMap.put("SRC_IN",AlphaComposite.SrcIn); compositeMap.put("DST_IN",AlphaComposite.DstIn); compositeMap.put("SRC_OUT",AlphaComposite.SrcOut); compositeMap.put("DST_OUT",AlphaComposite.DstOut); compositeMap.put("SRC_ATOP",AlphaComposite.SrcAtop); compositeMap.put("DST_ATOP",AlphaComposite.DstAtop); compositeMap.put("XOR",AlphaComposite.Xor); //下拉框选中事件 comboBox.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { if(e.getStateChange() == ItemEvent.SELECTED){ String selected = e.getItem().toString(); System.out.println(selected); drawPanel.setAlphaComposite(compositeMap.get(selected)); drawPanel.repaint(); //重画 } } }); //窗体改变事件 jf.addWindowStateListener(new WindowStateListener() { @Override public void windowStateChanged(WindowEvent e) { System.out.println("window state:"+e.paramString()); } }); } static class DrawingPanel extends JPanel{ BufferedImage bg; BufferedImage image; AlphaComposite alphaComposite; public BufferedImage getBg() { return bg; } public void setBg(BufferedImage bg) { this.bg = bg; } public BufferedImage getImage() { return image; } public void setImage(BufferedImage image) { this.image = image; } public AlphaComposite getAlphaComposite() { return alphaComposite; } public void setAlphaComposite(AlphaComposite alphaComposite) { this.alphaComposite = alphaComposite; } /** * 重写paint方法 * @param g */ @Override public void paint(Graphics g){ //调用的super.paint(g),让父类做一些事前的工作,如刷新屏幕 super.paint(g); //在面板上画画 Graphics2D g2d = (Graphics2D)g; g2d.setComposite(AlphaComposite.Src); g2d.drawImage(bg,100,100,null); //背景图 if(alphaComposite!=null) { g2d.setComposite(alphaComposite); }else{ //默认SrcOver g2d.setComposite(AlphaComposite.SrcOver); } g2d.drawImage(image,100,100,null); //叠加图 //g2d.setColor(Color.GREEN); //g2d.fillRoundRect(100,100,image.getWidth(),image.getHeight(),image.getWidth(),image.getHeight()); //叠加图层 g2d.dispose(); } } }
登录后复制
以上就是本篇文章的全部内容了,关于Java的更多精彩可以关注PHP中文网的Java视频教程和Java教程栏目!!!
以上是java绘图合并图像AlphaComposite模式测试的详细内容。更多信息请关注PHP中文网其他相关文章!
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章
刺客信条阴影:贝壳谜语解决方案
3 周前
By DDD
Windows 11 KB5054979中的新功能以及如何解决更新问题
2 周前
By DDD
在哪里可以找到原子中的起重机控制钥匙卡
3 周前
By DDD
节省R.E.P.O.解释(并保存文件)
1 个月前
By 尊渡假赌尊渡假赌尊渡假赌
刺客信条阴影 - 如何找到铁匠,解锁武器和装甲定制
4 周前
By DDD

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

探究最终一致性在分布式系统中的应用分布式事务处理一直是分布式系统架构中的一个难题。为了解决各个子事...

Java远程调试中常量获取的疑问解答在使用Java进行远程调试时,许多开发者可能会遇到一些难以理解的现象。其�...

Tomcat加载Spring-Web模块时SPI机制的类加载行为分析Tomcat在加载Spring-Web模块时,为了发现并使用Spring-Web提供的Servle...

WebSocket服务器返回401后浏览器无反应的处理方法在使用Netty开发WebSocket服务器时,经常会遇到验证token的需求。�...

探讨后端开发中的分层架构在后端开发中,分层架构是一种常见的设计模式,通常包括controller、service和dao三层�...

在IntelliJ...
