先把graphics设置一下颜色,用 ARGB颜色
g.setColor(new Color(r,g,b,a));
然后再画f.jpg再设置颜色RGB
g.setColor(new Color(r,g,b));
再画d.jpg看看

解决方案 »

  1.   

    我先试试看
    这个方法不知道如何用,它好像有个设置透明的属性。
    public abstract boolean drawImage(Image img,
                                      int x,
                                      int y,
                                      int width,
                                      int height,
                                      Color bgcolor,
                                      ImageObserver observer)
    我看了一下jdk的help,Color.TRANSLUCENT
    这个东东怎么用呢,求教???
      

  2.   

    在java 2d Api中,透明时由一个alpha channel来描述的,每个像素,除了他的红,绿和蓝色部分外,还有一个0(完全透明)与1(完全不透明)之间的alpha(透明度)值。列如
    new Color(0.7F, 0.7F, 0.0F, 0.5F) 为一种淡黄色,透明度为50%。
    int rule = AlphaComposite.SRC_OVER;   //透明的至于现有图形的上面
    float alpha = 0.5                   // 50%透明
    g2.setComposite(AlphaComposite.getInstance(rule, alpha));
      

  3.   

    lkenshin(我来帮你up):
    试过了,不能如愿啊。有其他办法吗?谢谢........
      

  4.   

    LoveRose(旺旺) :g2.setComposite(AlphaComposite.getInstance(rule, alpha));
    在Graphics中找不到 setComposite()方法,怎么办呢,谢谢了!
      

  5.   

    java.awt.Graphics2d
      public abstract void 
        setComposite(Composite comp)
    将Graphics 换成 Graphics2d后什么都显示不出来了,连最初的2个图片也没有了,怎么办啊。谢谢
      

  6.   

    你将JPG改成GIF,JPG没有背景透明,GIF才支持背景透明
      

  7.   

    我想你不好在程序里去处理JPG图像的透明问题的,GIF支持层,所以才会有透明背景,JPG不支持,用程序处理将会非常麻烦
      

  8.   

    我也在处理这个问题,JPG是不支持透明的,所以没有办法实现你的要求。
    所以,你的上面的一层一定要做成GIF的格式,才有可能实现。
    如果你要把JPG的图片变成GIF的格式,并且去掉背景的颜色,实在是有点困难。
    我没有找到GIF的图象的格式,如果那位有的话,给我一份。
      

  9.   

    g.drawImage(img1, 0, 0, this);
    如果img1是背景透明的GIF的话,不用进行另外的处理的呀,下面的图片肯定不会被遮住
      

  10.   

    -----
    如果你要把JPG的图片变成GIF的格式,并且去掉背景的颜色,实在是有点困难。
    -----
    但头对我说,一定可以实现。我昏啊。
    现在我在《Java2核心技术》2 中找到了部分源码,可做到旋转、模糊、底片等功能,但就是没有透明功能。我昏四啊..................
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.geom.*;
    import java.awt.image.*;
    import java.io.*;public class ImageProcessingTest
    {  public static void main(String[] args)
       {  JFrame frame = new ImageProcessingFrame();
          frame.show();
       }
    }class ImageProcessingFrame extends JFrame
       implements ActionListener
    {  public ImageProcessingFrame()
       {  setTitle("ImageProcessingTest");
          setSize(300, 400);
          addWindowListener(new WindowAdapter()
             {  public void windowClosing(WindowEvent e)
                {  System.exit(0);
                }
             } );      Container contentPane = getContentPane();
          panel = new ImageProcessingPanel();
          contentPane.add(panel, "Center");      JMenu fileMenu = new JMenu("File");
          openItem = new JMenuItem("Open");
          openItem.addActionListener(this);
          fileMenu.add(openItem);      exitItem = new JMenuItem("Exit");
          exitItem.addActionListener(this);
          fileMenu.add(exitItem);      JMenu editMenu = new JMenu("Edit");
          blurItem = new JMenuItem("Blur");
          blurItem.addActionListener(this);
          editMenu.add(blurItem);      sharpenItem = new JMenuItem("Sharpen");
          sharpenItem.addActionListener(this);
          editMenu.add(sharpenItem);      brightenItem = new JMenuItem("Brighten");
          brightenItem.addActionListener(this);
          editMenu.add(brightenItem);      edgeDetectItem = new JMenuItem("Edge detect");
          edgeDetectItem.addActionListener(this);
          editMenu.add(edgeDetectItem);      negativeItem = new JMenuItem("Negative");
          negativeItem.addActionListener(this);
          editMenu.add(negativeItem);      rotateItem = new JMenuItem("Rotate");
          rotateItem.addActionListener(this);
          editMenu.add(rotateItem);      JMenuBar menuBar = new JMenuBar();
          menuBar.add(fileMenu);
          menuBar.add(editMenu);
          setJMenuBar(menuBar);
       }   public void actionPerformed(ActionEvent evt)
       {  Object source = evt.getSource();
          if (source == openItem)
          {  JFileChooser chooser = new JFileChooser();
             chooser.setCurrentDirectory(new File("."));         chooser.setFileFilter(new
                javax.swing.filechooser.FileFilter()
                {  public boolean accept(File f)
                   {  String name = f.getName().toLowerCase();
                      return name.endsWith(".gif")
                         || name.endsWith(".jpg")
                         || name.endsWith(".jpeg")
                         || f.isDirectory();
                   }
                   public String getDescription()
                   {  return "Image files";
                   }
                });         int r = chooser.showOpenDialog(this);
             if(r == JFileChooser.APPROVE_OPTION)
             {  String name
                   = chooser.getSelectedFile().getAbsolutePath();
                panel.loadImage(name);
             }
          }
          else if (source == exitItem) System.exit(0);
          else if (source == blurItem) panel.blur();
          else if (source == sharpenItem) panel.sharpen();
          else if (source == brightenItem) panel.brighten();
          else if (source == edgeDetectItem) panel.edgeDetect();
          else if (source == negativeItem) panel.negative();
          else if (source == rotateItem) panel.rotate();
       }   private ImageProcessingPanel panel;
       private JMenuItem openItem;
       private JMenuItem exitItem;
       private JMenuItem blurItem;
       private JMenuItem sharpenItem;
       private JMenuItem brightenItem;
       private JMenuItem edgeDetectItem;
       private JMenuItem negativeItem;
       private JMenuItem rotateItem;
    }class ImageProcessingPanel extends JPanel
    {  public void paintComponent(Graphics g)
       {  super.paintComponent(g);
          if (image != null)
             g.drawImage(image, 0, 0, null);
       }   public void loadImage(String name)
       {  Image loadedImage
             = Toolkit.getDefaultToolkit().getImage(name);
          MediaTracker tracker = new MediaTracker(this);
          tracker.addImage(loadedImage, 0);
          try { tracker.waitForID(0); }
          catch (InterruptedException e) {}
          image = new BufferedImage(loadedImage.getWidth(null),
             loadedImage.getHeight(null), BufferedImage.TYPE_INT_RGB);
          Graphics2D g2 = image.createGraphics();
          g2.drawImage(loadedImage, 0, 0, null);      repaint();
       }   private void filter(BufferedImageOp op)
       {  BufferedImage filteredImage
             = new BufferedImage(image.getWidth(), image.getHeight(),
                image.getType());
          op.filter(image, filteredImage);
          image = filteredImage;
          repaint();
       }   private void convolve(float[] elements)
       {  Kernel kernel = new Kernel(3, 3, elements);
          ConvolveOp op = new ConvolveOp(kernel);
          filter(op);
       }   public void blur()
       {  float weight = 1.0f/9.0f;
          float[] elements = new float[9];
          for (int i = 0; i < 9; i++)
             elements[i] = weight;
          convolve(elements);
       }   public void sharpen()
       {  float[] elements =
             {  0.0f, -1.0f, 0.0f,
                -1.0f,  5.f, -1.0f,
                0.0f, -1.0f, 0.0f
             };
          convolve(elements);
       }   void edgeDetect()
       {  float[] elements =
             {  0.0f, -1.0f, 0.0f,
                -1.0f,  4.f, -1.0f,
                0.0f, -1.0f, 0.0f
             };
          convolve(elements);
       }   public void brighten()
       {  float a = 1.5f;
          float b = -20.0f;
          RescaleOp op = new RescaleOp(a, b, null);
          filter(op);
       }   void negative()
       {  byte negative[] = new byte[256];
          for (int i = 0; i < 256; i++)
             negative[i] = (byte)(255 - i);
          ByteLookupTable table = new ByteLookupTable(0, negative);
          LookupOp op = new LookupOp(table, null);
          filter(op);
       }   void rotate()
       {  AffineTransform transform
             = AffineTransform.getRotateInstance(Math.toRadians(5),
                image.getWidth() / 2, image.getHeight() / 2);
          AffineTransformOp op = new AffineTransformOp(transform,
             AffineTransformOp.TYPE_BILINEAR);
          filter(op);
       }   private BufferedImage image;
    }
      

  11.   

    难道你就不可以用图像处理软件将JPG改成GIF?
      

  12.   

    是可以用ACDSee把图像转换为gif,可如果要转换透明的,必须用图片处理工具,如photoshop,可现在的问题是不能用其他软件,必须用java实现这个功能,我昏啊,怎么办呢
      

  13.   

    指定一种背景颜色,然后在Applet上先画出d.jpg,然后分析f.jpg,把每个像素点取出来,如果是背景色则不处理,否则就把这个点描到d.jpg上覆盖它,这样子可以融合两幅画,只是效率太低,而且很不准确,因为可能有很多有用的点和背景色是一样的.先试试看效果如何!!!
    (BufferedImage有一个取像素点的功能,可以用用看)
      

  14.   

    来晚了的朋友,请去同贴:
    http://expert.csdn.net/Expert/topic/2407/2407594.xml?temp=.7180292