栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Java Graphics2D中绘制透明图像

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Java Graphics2D中绘制透明图像

您使用的规则错误-请勿使用AlphaComposite.CLEAR。

AlphaComposite API声明有关CLEAR:

目的地的颜色和Alpha均被清除(Porter-Duff清除规则)。源和目的地均不用作输入。

因此,这将使图像消失。尝试其他规则。在创建SSCCE时,我创建了我的。查看当您注释掉另一条规则线时会发生什么。例如更改此

// int rule = AlphaComposite.CLEAR;int rule = AlphaComposite.SRC_OVER;

对此:

int rule = AlphaComposite.CLEAR;// int rule = AlphaComposite.SRC_OVER;

整个SSCCE:

import java.awt.AlphaComposite;import java.awt.BasicStroke;import java.awt.Color;import java.awt.Composite;import java.awt.Dimension;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.RenderingHints;import java.awt.Stroke;import java.awt.image.BufferedImage;import javax.swing.*;public class TestAlphaComposite extends JPanel {   private static final int PREF_W = 400;   private static final int PREF_H = PREF_W;   private static final Stroke BASIC_STROKE = new BasicStroke(6f);   BufferedImage backgroundImage;   BufferedImage overlayImage;   public TestAlphaComposite() {      backgroundImage = createBackGroundImage();      overlayImage = createOverlayImage();   }   private BufferedImage createBackGroundImage() {      BufferedImage img = new BufferedImage(PREF_W, PREF_H, BufferedImage.TYPE_INT_ARGB);      Graphics2D g2 = img.createGraphics();      g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);      g2.setStroke(BASIC_STROKE);      g2.setColor(Color.blue);      int circleCount = 10;      for (int i = 0; i < circleCount ; i++) {         int x = (i * PREF_W) / (2 * circleCount);         int y = x;         int w = PREF_W - 2 * x;         int h = w;         g2.drawOval(x, y, w, h);      }      g2.dispose();      return img;   }   private BufferedImage createOverlayImage() {      BufferedImage img = new BufferedImage(PREF_W, PREF_H, BufferedImage.TYPE_INT_ARGB);      Graphics2D g2 = img.createGraphics();      g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);      g2.setStroke(BASIC_STROKE);      g2.setColor(Color.red);      int circleCount = 10;      for (int i = 0; i < circleCount + 1; i++) {         int x1 = (i * PREF_W) / (circleCount);         int y1 = 0;         int x2 = PREF_W - x1;         int y2 = PREF_H;         float alpha = (float)i / circleCount;         if (alpha > 1f) { alpha = 1f;         }         // int rule = AlphaComposite.CLEAR;         int rule = AlphaComposite.SRC_OVER;         Composite comp = AlphaComposite.getInstance(rule , alpha );         g2.setComposite(comp );         g2.drawLine(x1, y1, x2, y2);      }      g2.dispose();      return img;   }   @Override   public Dimension getPreferredSize() {      return new Dimension(PREF_W, PREF_H);   }   @Override   protected void paintComponent(Graphics g) {      super.paintComponent(g);      if (backgroundImage != null) {         g.drawImage(backgroundImage, 0, 0, null);      }      if (overlayImage != null) {         g.drawImage(overlayImage, 0, 0, null);      }   }   private static void createAndShowGui() {      Jframe frame = new Jframe("TestAlphaComposite");      frame.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);      frame.getContentPane().add(new TestAlphaComposite());      frame.pack();      frame.setLocationRelativeTo(null);      frame.setVisible(true);   }   public static void main(String[] args) {      SwingUtilities.invokeLater(new Runnable() {         public void run() { createAndShowGui();         }      });   }}

顺便说一句,您的SSCCE不是真正的SSCCE。我们任何人都不可能编译或运行该代码,因为它具有我们无法访问的依赖项,即“
com.blazingkin.atrox.ScreenManager”。如果将来需要我们的帮助,则需要编写更好的sscce。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/483517.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号