最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java利用AlphaComposite類合并圖像

 更新時(shí)間:2020年10月30日 09:25:05   作者:返回主頁追極  
這篇文章主要介紹了Java利用AlphaComposite類合并圖像,幫助大家更好的利用Java處理圖像,感興趣的朋友可以了解下
package com.hdwang.test;

import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;

/**
 * Created by hdwang on 2018/10/11.
 */
public class TestDrawing {

  public static void main(String[] args) {
    testComposite();
  }

  /**
   * 合成測(cè)試
   */
  public static void testComposite() {
    //創(chuàng)建背景圖片(帶透明分量的)
    BufferedImage bg = new BufferedImage(300, 300, BufferedImage.TYPE_INT_ARGB);
    Graphics2D bgGraphics = (Graphics2D) bg.getGraphics();
    bgGraphics.setColor(Color.yellow); //設(shè)置顏色
    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();

    //創(chuàng)建第二張圖片
    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(); //內(nèi)容面板
    contentPanel.setBorder(BorderFactory.createLineBorder(Color.blue)); //設(shè)置邊框
    //contentPanel.setLayout(new BorderLayout());

    //添加標(biāo)簽
    JLabel label = new JLabel();
    label.setText("組合模式:");
    contentPanel.add(label);

    //添加下拉框
    JComboBox comboBox = new JComboBox();
    comboBox.addItem("默認(rèn)");
    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);

    JLabel label2 = new JLabel();
    label2.setText("源圖非透明度:");
    contentPanel.add(label2);

    //添加滑動(dòng)條([0-10]=>[0,0.1,0.2,.... 1.0])
    JSlider jSlider = new JSlider(0,10,10);
    jSlider.setMajorTickSpacing(5); // 設(shè)置主刻度間隔
    jSlider.setMinorTickSpacing(1); // 設(shè)置次刻度間隔
    jSlider.setPaintTicks(true); // 繪制刻度
    jSlider.setPaintLabels(true); // 繪制標(biāo)簽
    jSlider.setSnapToTicks(true); // 對(duì)其到刻度取值
     /*
     * 給指定的刻度值顯示自定義標(biāo)簽
     */
    Hashtable<Integer, JComponent> hashtable = new Hashtable<Integer, JComponent>();
    hashtable.put(0, new JLabel("0"));   // 0 刻度位置,顯示 "0"
    hashtable.put(5, new JLabel("0.5"));  // 5 刻度位置,顯示 "0.5"
    hashtable.put(10, new JLabel("1"));    // 10 刻度位置,顯示 "1"
    jSlider.setLabelTable(hashtable); //將刻度值和自定義標(biāo)簽的對(duì)應(yīng)關(guān)系設(shè)置到滑塊(設(shè)置后不再顯示默認(rèn)的刻度值)

    contentPanel.add(jSlider);


    jf.setContentPane(contentPanel); //窗體設(shè)置內(nèi)容面板為jp
    jf.setBounds(200, 200, 500, 500);
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jf.setVisible(true); //窗體可見


    DrawingPanel drawPanel = new DrawingPanel();
    drawPanel.setBounds(0,60,500,415);
    drawPanel.setPreferredSize(new Dimension(500,415));
    drawPanel.setBorder(BorderFactory.createLineBorder(Color.red)); //設(shè)置邊框
    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(); //重畫
        }
      }
    });

    //滑動(dòng)條改變事件
    jSlider.addChangeListener(new ChangeListener() {
      @Override
      public void stateChanged(ChangeEvent e) {
        int val = jSlider.getValue();
        float alpha = (float) (val / 10.0);
        System.out.println("alpha:"+alpha);
        drawPanel.setAlpha(alpha);
        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;
    float alpha = 1.0f; //源圖非透明度(新加的圖)

    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;
    }

    public float getAlpha() {
      return alpha;
    }

    public void setAlpha(float alpha) {
      this.alpha = alpha;
    }

    /**
     * 重寫paint方法
     * @param g
     */
    @Override
    public void paint(Graphics g){
      //調(diào)用的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.derive(alpha));
      }else{
        //默認(rèn)SrcOver
        g2d.setComposite(AlphaComposite.SrcOver.derive(alpha));
      }
      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利用AlphaComposite類合并圖像的詳細(xì)內(nèi)容,更多關(guān)于Java 合并圖像的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • intellij idea如何將web項(xiàng)目打成war包的實(shí)現(xiàn)

    intellij idea如何將web項(xiàng)目打成war包的實(shí)現(xiàn)

    這篇文章主要介紹了intellij idea如何將web項(xiàng)目打成war包的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Mybatis插入語句默認(rèn)值不生效的問題及解決

    Mybatis插入語句默認(rèn)值不生效的問題及解決

    這篇文章主要介紹了Mybatis插入語句默認(rèn)值不生效的問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • java執(zhí)行windows下cmd命令的方法

    java執(zhí)行windows下cmd命令的方法

    這篇文章主要介紹了java執(zhí)行windows下cmd命令的方法,較為詳細(xì)的說明了Java執(zhí)行Windows下CMD命令的方法,并總結(jié)了常用的CMD命令供大家參考,需要的朋友可以參考下
    2014-11-11
  • spring之SpEL表達(dá)式詳解

    spring之SpEL表達(dá)式詳解

    這篇文章主要介紹了spring之SpEL表達(dá)式詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 淺析SpringBoot中使用thymeleaf找不到.HTML文件的原因

    淺析SpringBoot中使用thymeleaf找不到.HTML文件的原因

    這篇文章主要介紹了SpringBoot中使用thymeleaf找不到.HTML文件的原因分析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Java中左移和右移問題圖文詳解

    Java中左移和右移問題圖文詳解

    左移和右移并不常用,在一些特殊情況下才會(huì)使用,比如加解密時(shí),會(huì)大量用到,這篇文章主要給大家介紹了關(guān)于Java中左移和右移問題的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • SpringBoot讀取多環(huán)境配置文件的幾種方式

    SpringBoot讀取多環(huán)境配置文件的幾種方式

    這篇文章主要給大家介紹了SpringBoot讀取多環(huán)境配置文件的幾種方式,文章通過代碼示例介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2023-10-10
  • java實(shí)現(xiàn)郵件發(fā)送

    java實(shí)現(xiàn)郵件發(fā)送

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)郵件發(fā)送,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • Java中的繼承關(guān)系與方法覆蓋

    Java中的繼承關(guān)系與方法覆蓋

    這篇文章主要介紹了Java中的繼承關(guān)系與方法覆蓋,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • springboot獲取當(dāng)前用戶信息的三種方式

    springboot獲取當(dāng)前用戶信息的三種方式

    本文詳細(xì)介紹了在開發(fā)中獲取當(dāng)前操作用戶信息的三種方式:使用ThreadLocal存儲(chǔ)用戶信息、通過攔截器和注解結(jié)合Shiro框架獲取用戶信息、以及使用Redis存儲(chǔ)用戶信息,每種方式都有具體的實(shí)現(xiàn)步驟和注意事項(xiàng),可根據(jù)實(shí)際需求選擇合適的方法
    2024-10-10

最新評(píng)論

榆中县| 张家港市| 陵水| 田阳县| 泊头市| 舟山市| 呼伦贝尔市| 康马县| 湘潭市| 亚东县| 米林县| 南汇区| 涪陵区| 新安县| 遵化市| 都匀市| 桦南县| 富宁县| 林口县| 闽清县| 塔城市| 武强县| 米脂县| 富宁县| 常熟市| 营口市| 任丘市| 高州市| 上虞市| 彰化县| 江津市| 锡林浩特市| 克拉玛依市| 陇川县| 手游| 扬州市| 辽宁省| 永修县| 嘉义市| 和龙市| 宁夏|