Maison Java javaDidacticiel dessin java fusionner image test du mode AlphaComposite

dessin java fusionner image test du mode AlphaComposite

Oct 12, 2018 pm 02:24 PM

Le contenu de cet article concerne le test du mode AlphaComposite pour le dessin et la fusion d'images Java. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

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();
        }
    }
}
Copier après la connexion

Ce qui précède est l'intégralité du contenu de cet article. Vous pouvez prêter attention à des choses plus excitantes. à propos de Java. Le Tutoriel vidéo Java et la Colonne du didacticiel Java du site Web chinois PHP ! ! !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Dans le débogage à distance Java, comment obtenir correctement des valeurs constantes sur les serveurs distants? Dans le débogage à distance Java, comment obtenir correctement des valeurs constantes sur les serveurs distants? Apr 19, 2025 pm 01:54 PM

Questions et réponses sur l'acquisition constante dans le débogage à distance Java Lors de l'utilisation de Java pour un débogage à distance, de nombreux développeurs peuvent rencontrer des phénomènes difficiles. Il...

En développement arrière, comment distinguer les responsabilités de la couche de service et de la couche DAO? En développement arrière, comment distinguer les responsabilités de la couche de service et de la couche DAO? Apr 19, 2025 pm 01:51 PM

Discuter de l'architecture hiérarchique dans le développement back-end. Dans le développement back-end, l'architecture hiérarchique est un modèle de conception courant, y compris généralement le contrôleur, le service et les trois couches DAO ...

Comment convertir les noms en nombres pour implémenter le tri au sein des groupes? Comment convertir les noms en nombres pour implémenter le tri au sein des groupes? Apr 19, 2025 pm 01:57 PM

Comment convertir les noms en nombres pour implémenter le tri au sein des groupes? Lors du tri des utilisateurs en groupes, il est souvent nécessaire de convertir le nom de l'utilisateur en numéros afin qu'il puisse être différent ...

Que dois-je faire si une interface tierce est appelée dans le projet Spring Boot, et que le cas de nom de champ et la méthode Getter sont incohérents, entraînant une défaillance de transmission des données? Que dois-je faire si une interface tierce est appelée dans le projet Spring Boot, et que le cas de nom de champ et la méthode Getter sont incohérents, entraînant une défaillance de transmission des données? Apr 19, 2025 pm 02:03 PM

Les difficultés rencontrées lors de l'appel des interfaces tierces pour transmettre des données dans le projet Springboot seront utilisées pour un ressort ...

Pourquoi signale-t-il une erreur lors de la soumission d'un travail de pyflink sur le fil? Pourquoi signale-t-il une erreur lors de la soumission d'un travail de pyflink sur le fil? Apr 19, 2025 pm 02:06 PM

Analyse de la raison pour laquelle le script Python ne peut être trouvé lors de la soumission d'un travail de pyflink sur le fil lorsque vous essayez de soumettre un travail de pyflink via le fil, vous pouvez rencontrer ...

Comment modifier dynamiquement le paramètre SavePath de @Excel Annotation dans Easypoi lorsque le projet commence en Java? Comment modifier dynamiquement le paramètre SavePath de @Excel Annotation dans Easypoi lorsque le projet commence en Java? Apr 19, 2025 pm 02:09 PM

Comment configurer dynamiquement les paramètres des annotations de classe d'entité en Java pendant le processus de développement, nous rencontrons souvent la nécessité de configurer dynamiquement les paramètres d'annotation en fonction de différents environnements ...

See all articles