搜尋
首頁Javajava教程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

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版