代码:
  Color cin = new Color(0x9e, 0xa0, 0x9a);
  g2D.setColor(cin);
  g2D.fillRect(200, 100, 100, 100);  问题:
  要怎样对这个柱形,设置透明度和模糊度?

解决方案 »

  1.   

    http://tech.techweb.com.cn/archiver/tid-224125.html
      

  2.   

    dr_lou 老兄~ 我打开你给我的网站 把代码复制进类
     好不容易整的没错了但运行起来没看到任何效果
      

  3.   

    设置一个图形貌似根本不可能
    1.画在window上,让window透明
    2.画出透明的效果来
      

  4.   

    模糊不清楚,透明的话,设置Color的时候有alpha值。查一下API,
    比如new Color(0x9e, 0xa0, 0x9a, 0x80) 半透明
      

  5.   

    写了个简单的demo:import java.awt.AlphaComposite;
    import java.awt.Color;
    import java.awt.Composite;
    import java.awt.Graphics;
    import java.awt.Graphics2D;import javax.swing.JComponent;
    import javax.swing.JFrame;public class Zhuxing extends JComponent { public void paint(Graphics g) {
    super.paint(g);
    Graphics2D g2D = (Graphics2D) g;
    g2D.setColor(Color.lightGray);
    g2D.fillRect(200, 100, 100, 100);
    Composite c = g2D.getComposite();
    g2D.setColor(Color.blue);
    g2D.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.3f));
    g2D.fillOval(200, 75, 100, 50);

    g2D.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.7f));
    g2D.fillOval(200, 175, 100, 50);
    } public static void main(String[] diggy) {
    JFrame f = new JFrame("柱形");
    f.getContentPane().add(new Zhuxing());
    f.setSize(400, 300);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setVisible(true);
    }}
      

  6.   

    下面这个Demo可以让你全面了解AplpaComposite:import java.awt.AlphaComposite;
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Component;
    import java.awt.Composite;
    import java.awt.FlowLayout;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.RenderingHints;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.image.BufferedImage;
    import java.lang.reflect.Field;
    import javax.swing.JComboBox;
    import javax.swing.JComponent;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JSlider;
    import javax.swing.SwingUtilities;
    import javax.swing.event.ChangeEvent;
    import javax.swing.event.ChangeListener;public class AlphaCompositesApplication extends JFrame {
        private CompositePainter painter;
        private JSlider opacity;
        private JComboBox composites;
        
        public AlphaCompositesApplication() {
            super("Alpha Composites");
            
            add(painter = new CompositePainter(), BorderLayout.CENTER);
            
            JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEADING));
            panel.add(buildCompositeSelector());
            panel.add(buildOpacitySelector());
            add(panel, BorderLayout.SOUTH);
            
            setSize(400, 300);
            setLocationRelativeTo(null);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
        
        private Component buildOpacitySelector() {
            opacity = new JSlider(0, 100, 50);
            opacity.addChangeListener(new ChangeListener() {
                public void stateChanged(ChangeEvent changeEvent) {
                    changeComposite();
                }
            });
            JPanel panel = new JPanel();
            panel.add(new JLabel("0%"));
            panel.add(opacity);
            panel.add(new JLabel("100%"));
            return panel;
        }
        
        private Component buildCompositeSelector() {
            composites = new JComboBox(new String[] {
                "CLEAR",
                "DST", "DST_ATOP", "DST_IN", "DST_OUT", "DST_OVER",
                "SRC", "SRC_ATOP", "SRC_IN", "SRC_OUT", "SRC_OVER",
                "XOR"
            });
            composites.setSelectedItem("SRC");
            composites.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent actionEvent) {
                    changeComposite();
                }
            });
            return composites;
        }
        
        private void changeComposite() {
            String rule = composites.getSelectedItem().toString();
            try {
                Field ruleField = AlphaComposite.class.getDeclaredField(rule);
                AlphaComposite composite = AlphaComposite.getInstance(ruleField.getInt(null),
                    (float) opacity.getValue() / 100.0f);
                painter.setComposite(composite);
            } catch (SecurityException ex) {
                ex.printStackTrace();
            } catch (NoSuchFieldException ex) {
                ex.printStackTrace();
            } catch (IllegalArgumentException ex) {
                ex.printStackTrace();
            } catch (IllegalAccessException ex) {
                ex.printStackTrace();
            }
        }
        
        private final class CompositePainter extends JComponent {
            private AlphaComposite composite = AlphaComposite.getInstance(
                AlphaComposite.SRC, 0.5f);        @Override
            protected void paintComponent(Graphics g) {
                BufferedImage image = new BufferedImage(getWidth(), getHeight(),
                    BufferedImage.TYPE_INT_ARGB);
                Graphics2D g2 = image.createGraphics();
                g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                    RenderingHints.VALUE_ANTIALIAS_ON);
                
                g2.setColor(Color.BLUE);
                g2.fillRect(4 + (getWidth() / 4), 4, getWidth() / 2, getHeight() - 8);
                g2.setColor(Color.RED);
                g2.setComposite(composite);
                g2.fillOval(40, 40, getWidth() - 80, getHeight() - 80);
                g2.dispose();
                
                g.drawImage(image, 0, 0, null);
            }        private void setComposite(AlphaComposite composite) {
                this.composite = composite;
                repaint();
            }
        }
        
        public static void main(String... args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    new AlphaCompositesApplication().setVisible(true);
                }
            });
        }
    }
      

  7.   

      diggywang 兄~ 我复制了你的两个demo 
     代码没有错误,但是都出不了效果
      

  8.   


    都有main函数的哦,直接写一个类文件就可以运行。
      

  9.   


     我是建了两个同名称的类,1,AlphaCompositesApplication ;2,Zhuxing 
    但是点击运行按钮没反映 ,我的其它类都可以。
     虽然我没运行大致看了下是实现透明效果,但是模糊效果还是没出来
      

  10.   


    你是初学者么?强烈怀疑你的IDE。
    这两个程序在记事本上javac编译,然后java命令运行都可以。我在Notepad上都测过的。
      

  11.   

    模糊也很简单,只要实现一个java.awt.image.ConvolveOp对象,将原始图像通过ConvolveOp对象的filter方法进行一定规则的过滤就行。
      

  12.   

    都告诉你了原理,自己专研下API就行了,每天顶啊,up啊,有意义吗?这点时间花在自己思考上,早写出程序来了!
      

  13.   


      你说的到是没错~ 问题我现在要急着出来 没办法
     你说的那方法 貌似是要把我画出来的柱形转换成Image对象
      看了一些列子都是直接读本地的图片处理的
     这个处理过程 还是比较模糊 还是请指教下
     
      

  14.   

      哪个能随便给我一个小小理解的demo就好~ 把画出来的柱形转换成image对象,
     convolve.filter(BufferedImage src, BufferedImage dst);
    因为我看到的都是取本地的图片来操作的
    没办法 新手嘛多多照顾下
      

  15.   


    自己创建一个BufferedImage,稍微改改.这样绘制效率高很多。package org.virbraligo.swing;import java.awt.AlphaComposite;
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Composite;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Transparency;
    import java.awt.image.BufferedImage;import javax.swing.JComponent;
    import javax.swing.JFrame;public class Zhuxing extends JComponent { BufferedImage image = null; public void paint(Graphics g) {
    super.paint(g);
    if (image == null) {
    image = ((Graphics2D)g).getDeviceConfiguration()
    .createCompatibleImage(500, 500,
    Transparency.TRANSLUCENT);
    Graphics2D g2D = image.createGraphics();
    g2D.setColor(Color.lightGray);
    g2D.fillRect(200, 100, 100, 100);
    Composite c = g2D.getComposite();
    g2D.setColor(Color.blue);
    g2D.setComposite(AlphaComposite.getInstance(
    AlphaComposite.SRC_OVER, 0.3f));
    g2D.fillOval(200, 75, 100, 50); g2D.setComposite(AlphaComposite.getInstance(
    AlphaComposite.SRC_OVER, 0.7f));
    g2D.fillOval(200, 175, 100, 50);
    g2D.dispose();
    }
    ((Graphics2D) g).drawImage(image, null, 0, 0);
    } public static void main(String[] diggy) {
    JFrame f = new JFrame("柱形");
    f.getContentPane().setLayout(new BorderLayout());
    f.getContentPane().add(new Zhuxing(), BorderLayout.CENTER);
    f.setSize(400, 300);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setVisible(true);
    }}
      

  16.   

    diggywang  谢谢你提供的demo image = ((Graphics2D)g).getDeviceConfiguration().createCompatibleImage(500,500,Transparency.TRANSLUCENT); 这个方法能不能换一个,因为我原始的背景都别他覆盖了,背景都变成黑色的了。
      

  17.   


    不可能,这个方法产生的是一个透明图像。TRANSLUCENT属性就是半透明的意思,除非你用了OPAQUE,或者后面又改变了image对象,重新new了一个但又没设置透明属性.
      

  18.   

      diggywang 不好意思 这几天在外出,等会马上结账
     这个问题比较头痛啊,我要这个模糊效果,但是这样有一块黑色的背景我本身的背景就无法显示
      还有其它的办法没? 给个思路~
     
      

  19.   

    你自己查下产生透明背景的API,上面的DEMO在我机器上是好用的,以前很多图形处理项目上我也是这么处理的,这样是可以产生透明背景的。如果你那里不行,可能跟图形设备有关了。你应该换下思路。