经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Java » 查看文章
java绘图合并图像AlphaComposite模式测试
来源:cnblogs  作者:追极  时间:2018/10/12 9:49:29  对本文有异议
  1. 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;/**
  2.  * Created by hdwang on 2018/10/11. */public class TestDrawing {public static void main(String[] args) {
  3.         testComposite();
  4.     }/** * 合成测试     */public static void testComposite() {//创建背景图片(带透明分量的)BufferedImage bg = new BufferedImage(300, 300, BufferedImage.TYPE_INT_ARGB);
  5.         Graphics2D bgGraphics = (Graphics2D) bg.getGraphics();
  6.         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);
  7.         bgGraphics.setFont(new Font("楷体", Font.ITALIC, 50));
  8.         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);
  9.         Graphics2D imageGraphics = (Graphics2D) image.getGraphics();
  10.         imageGraphics.setColor(Color.GREEN);
  11.         imageGraphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
  12.         imageGraphics.fillRoundRect(0, 0, image.getWidth(), image.getHeight(), image.getWidth(), image.getHeight());
  13.         imageGraphics.setColor(Color.BLACK);
  14.         imageGraphics.setFont(new Font("楷体", Font.ITALIC, 50));
  15.         imageGraphics.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
  16.         imageGraphics.drawString("前景绿色", 50, 200);
  17.         imageGraphics.dispose();
  18.  
  19.         JFrame jf = new JFrame(); //窗体JPanel contentPanel = new JPanel(); //内容面板contentPanel.setBorder(BorderFactory.createLineBorder(Color.blue)); //设置边框//contentPanel.setLayout(new BorderLayout());JLabel label = new JLabel();
  20.         label.setText("组合模式:");
  21.         contentPanel.add(label);
  22.  
  23.         JComboBox comboBox = new JComboBox();
  24.         comboBox.addItem("默认");
  25.         comboBox.addItem("CLEAR");
  26.         comboBox.addItem("SRC");
  27.         comboBox.addItem("DST");
  28.         comboBox.addItem("SRC_OVER");
  29.         comboBox.addItem("DST_OVER");
  30.         comboBox.addItem("SRC_IN");
  31.         comboBox.addItem("DST_IN");
  32.         comboBox.addItem("SRC_OUT");
  33.         comboBox.addItem("DST_OUT");
  34.         comboBox.addItem("SRC_ATOP");
  35.         comboBox.addItem("DST_ATOP");
  36.         comboBox.addItem("XOR");
  37.         contentPanel.add(comboBox);
  38.  
  39.         jf.setContentPane(contentPanel); //窗体设置内容面板为jpjf.setBounds(200, 200, 500, 500);
  40.         jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  41.         jf.setVisible(true); //窗体可见DrawingPanel drawPanel = new DrawingPanel();
  42.         drawPanel.setBounds(0,35,500,440);
  43.         drawPanel.setPreferredSize(new Dimension(500,440));
  44.         drawPanel.setBorder(BorderFactory.createLineBorder(Color.red)); //设置边框        drawPanel.setBg(bg);
  45.         drawPanel.setImage(image);       // drawPanel.setAlphaComposite(AlphaComposite.SrcAtop);        contentPanel.add(drawPanel);
  46.  
  47.         Map<String,AlphaComposite> compositeMap = new HashMap<>();
  48.         compositeMap.put("CLEAR",AlphaComposite.Clear);
  49.         compositeMap.put("SRC",AlphaComposite.Src);
  50.         compositeMap.put("DST",AlphaComposite.Dst);
  51.         compositeMap.put("SRC_OVER",AlphaComposite.SrcOver);
  52.         compositeMap.put("DST_OVER",AlphaComposite.DstOver);
  53.         compositeMap.put("SRC_IN",AlphaComposite.SrcIn);
  54.         compositeMap.put("DST_IN",AlphaComposite.DstIn);
  55.         compositeMap.put("SRC_OUT",AlphaComposite.SrcOut);
  56.         compositeMap.put("DST_OUT",AlphaComposite.DstOut);
  57.         compositeMap.put("SRC_ATOP",AlphaComposite.SrcAtop);
  58.         compositeMap.put("DST_ATOP",AlphaComposite.DstAtop);
  59.         compositeMap.put("XOR",AlphaComposite.Xor);//下拉框选中事件comboBox.addItemListener(new ItemListener() {
  60.             @Overridepublic void itemStateChanged(ItemEvent e) {if(e.getStateChange() == ItemEvent.SELECTED){
  61.                     String selected =  e.getItem().toString();
  62.                     System.out.println(selected);
  63.                     drawPanel.setAlphaComposite(compositeMap.get(selected));
  64.                     drawPanel.repaint(); //重画                }
  65.             }
  66.         });//窗体改变事件jf.addWindowStateListener(new WindowStateListener() {
  67.  
  68.             @Overridepublic void windowStateChanged(WindowEvent e) {
  69.                 System.out.println("window state:"+e.paramString());
  70.             }
  71.         });
  72.     }static class DrawingPanel extends JPanel{
  73.  
  74.         BufferedImage bg;
  75.         BufferedImage image;
  76.         AlphaComposite alphaComposite;public BufferedImage getBg() {return bg;
  77.         }public void setBg(BufferedImage bg) {this.bg = bg;
  78.         }public BufferedImage getImage() {return image;
  79.         }public void setImage(BufferedImage image) {this.image = image;
  80.         }public AlphaComposite getAlphaComposite() {return alphaComposite;
  81.         }public void setAlphaComposite(AlphaComposite alphaComposite) {this.alphaComposite = alphaComposite;
  82.         }/** * 重写paint方法
  83.          * @param g         */@Overridepublic  void paint(Graphics g){//调用的super.paint(g),让父类做一些事前的工作,如刷新屏幕super.paint(g);//在面板上画画Graphics2D g2d = (Graphics2D)g;
  84.             g2d.setComposite(AlphaComposite.Src);
  85.             g2d.drawImage(bg,100,100,null); //背景图if(alphaComposite!=null) {
  86.                 g2d.setComposite(alphaComposite);
  87.             }else{//默认SrcOver                g2d.setComposite(AlphaComposite.SrcOver);
  88.             }
  89.             g2d.drawImage(image,100,100,null); //叠加图//g2d.setColor(Color.GREEN);//g2d.fillRoundRect(100,100,image.getWidth(),image.getHeight(),image.getWidth(),image.getHeight()); //叠加图层            g2d.dispose();
  90.         }
  91.     }
  92. }

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号