下面的代码图像是出来了
可惜没有透明,只是前面的图片有些改变
一起讨论讨论吧!
挺有意思的
/*
 * @(#)TestAlpha.java 1.0 03/10/29
 *
 * You can modify the template of this file in the
 * directory ..\JCreator\Templates\Template_2\Project_Name.java
 *
 * You can also create your own project template by making a new
 * folder in the directory ..\JCreator\Template\. Use the other
 * templates as examples.
 *
 */import java.awt.*;
import java.awt.image.*;
import java.applet.*;
import javax.imageio.*;
import java.io.*;
import java.awt.geom.*;
public class TestAlpha extends Applet {

public TestAlpha()
{}
    public void init()
    {
        this.setSize(new Dimension(800, 600));
        viewImage();
    }
    public void viewImage()
    {
        
    } 
    public void paint(Graphics g)     
    {
     super.paint(g);
     BufferedImage backImage = new BufferedImage(this.getWidth(), 
         this.getHeight(), BufferedImage.TYPE_INT_ARGB);
     BufferedImage foreImage = new BufferedImage(this.getWidth(), 
         this.getHeight(), BufferedImage.TYPE_INT_ARGB);
try
{
backImage = ImageIO.read(new File("back.gif"));
foreImage = ImageIO.read(new File("fore.gif"));
}
catch (IOException e)
{
}
Graphics2D backG2D = backImage.createGraphics();
Graphics2D foreG2D = foreImage.createGraphics();
foreG2D.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION,
                             RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
        // Clear image with transparent alpha by drawing a rectangle
       foreG2D.setComposite(AlphaComposite.getInstance(AlphaComposite.DST, 0.0f));
        //Rectangle2D.Double rect = new Rectangle2D.Double(0, 0, 
        // this.getWidth(), this.getHeight());
        //foreG2D.fill(rect);    
//g.drawImage(backImage, 0, 0, null);

backG2D.drawImage(foreImage, 0, 0, null);
g.drawImage(backImage, 0, 0, null);
    }
}

解决方案 »

  1.   

    关于透明图片参考我的文档吧
    http://www.csdn.net/develop/read_article.asp?id=16488
      

  2.   

    好像说得透明只能对某一特定的象素而言的
    对图片透明,不知道怎么实现了
    如下面的代码就实现了对蓝色的透明import java.awt.*;
    import java.awt.image.*;
    import java.applet.*;
    import javax.imageio.*;
    import java.io.*;
    import java.awt.geom.*;
    public class TestAlpha extends Applet {

    public TestAlpha()
    {}
        public void init()
        {
            this.setSize(new Dimension(800, 600));        
        }   
        public void paint(Graphics g)     
        {
         super.paint(g);
             Graphics2D g2 = (Graphics2D)g;
    BufferedImage image = new BufferedImage(getWidth(),getHeight(), BufferedImage.TYPE_INT_ARGB);
    Graphics2D gImage = image.createGraphics();
    gImage.setPaint(Color.red);
    gImage.fill(new Ellipse2D.Double(1,0,100,200));
    gImage.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f));
    gImage.setPaint(Color.blue);
    gImage.fill(new Rectangle2D.Double(50,50,300,250));
    g2.drawImage(image,null,0,0);
        }
    }
      

  3.   

    To: beyond_xiruo(Java/.NET两手抓,两手都要硬)
    你所提到的文档抓下代码试过了
    文字的透明化也只是单一颜色的处理
    那如果对于图片这样多颜色的怎么处理呢?
    楼主的目的是透明化一张图片
    请指点。
      

  4.   

    我这里有VC++和VB6的源码,但不知道如何转换为java代码,希望精通c、java的朋友帮忙看看,万分感激!!!
    ----------------------------- VC
    void CDrawPicture::TransparentBlt2(HDC hdcDest,int nXOriginDest,int nYOriginDest,int nWidthDest,int nHeightDest,
                         HDC hdcSrc,int nXOriginSrc,int nYOriginSrc,int nWidthSrc,int nHeightSrc,UINT crTransparent){
    HBITMAP hOldImageBMP, hImageBMP = CreateCompatibleBitmap(hdcDest, nWidthDest, nHeightDest); // 创建兼容位图
    HBITMAP hOldMaskBMP, hMaskBMP = CreateBitmap(nWidthDest, nHeightDest, 1, 1, NULL); // 创建单色掩码位图
    HDC hImageDC = CreateCompatibleDC(hdcDest);
    HDC hMaskDC = CreateCompatibleDC(hdcDest);
    hOldImageBMP = (HBITMAP)SelectObject(hImageDC, hImageBMP);
    hOldMaskBMP = (HBITMAP)SelectObject(hMaskDC, hMaskBMP); // 将源DC中的位图拷贝到临时DC中
    if (nWidthDest == nWidthSrc && nHeightDest == nHeightSrc)
    BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hdcSrc, nXOriginSrc, nYOriginSrc, SRCCOPY);
    else
    StretchBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, 
    hdcSrc, nXOriginSrc, nYOriginSrc, nWidthSrc, nHeightSrc, SRCCOPY); // 设置透明色
    //crTransparent = RGB(250,60,60); if (m_IsTransBGMaskDCSave==0) {
    m_hTransBGMaskDC = CreateCompatibleDC(hdcDest);
    hTransBGMaskBMP = CreateBitmap(nWidthDest, nHeightDest, 1, 1, NULL); // 创建单色掩码位图
    hOldTransBGMaskBMP = (HBITMAP)SelectObject(m_hTransBGMaskDC, hTransBGMaskBMP); SetBkColor(hImageDC, crTransparent); // 生成透明区域为白色,其它区域为黑色的掩码位图
    BitBlt(hMaskDC, 0, 0, nWidthDest, nHeightDest, hImageDC, 0, 0, SRCCOPY); int m_RColor,m_GColor,m_BColor;
    m_RColor = GetRValue(crTransparent);//store red color
    m_GColor = GetGValue(crTransparent);//store green color
    m_BColor = GetBValue(crTransparent);//store blue color
    int i,j,k;
    COLORREF m_GetColor;
    for (i=m_RColor-m_ColorMis;(i<=m_RColor+m_ColorMis&&i>=0&&i<=255);i++)  {
    for (j=m_GColor-m_ColorMis;(j<=m_GColor+m_ColorMis&&j>=0&&j<=255);j++)  {
    for (k=m_BColor-m_ColorMis;(k<=m_BColor+m_ColorMis&&k>=0&&k<=255);k++)  {
    m_GetColor=RGB(i,j,k);
    SetBkColor(hImageDC, m_GetColor);
    BitBlt(hMaskDC, 0, 0, nWidthDest, nHeightDest, hImageDC, 0, 0, SRCPAINT);
    }
    }
    } BitBlt(m_hTransBGMaskDC, 0, 0, nWidthDest, nHeightDest, hMaskDC, 0, 0, SRCCOPY);
    m_MaskWidth  = nWidthDest;
    m_MaskHeight = nHeightDest;
    m_IsTransBGMaskDCSave=1;
    }else{
    StretchBlt(hMaskDC, 0, 0, nWidthDest, nHeightDest, m_hTransBGMaskDC, 0, 0,m_MaskWidth, m_MaskHeight,SRCCOPY);
    }

    //SetBkColor(hImageDC, RGB(250,60,60));
    //BitBlt(hMaskDC, 0, 0, nWidthDest, nHeightDest, hImageDC, 0, 0, SRCPAINT); // 生成透明区域为黑色,其它区域保持不变的位图
    SetBkColor(hImageDC, RGB(0,0,0));
    SetTextColor(hImageDC, RGB(255,255,255));
    BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hMaskDC, 0, 0, SRCAND); // 透明部分保持屏幕不变,其它部分变成黑色
    SetBkColor(hdcDest,RGB(255,255,255));
    SetTextColor(hdcDest,RGB(0,0,0));
    BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest, hMaskDC, 0, 0, SRCAND); // "或"运算,生成最终效果
    BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest, hImageDC, 0, 0, SRCPAINT); // 清理、恢复
    SelectObject(hImageDC, hOldImageBMP);
    DeleteDC(hImageDC);
    SelectObject(hMaskDC, hOldMaskBMP);
    DeleteDC(hMaskDC);
    DeleteObject(hImageBMP);
    DeleteObject(hMaskBMP);
    }------------------------------------ VB
    http://www.vctop.com/View.Asp?ID=20&CateID=2
      

  5.   

    LoveRose(旺旺) 非常感谢你,当然来看我问题的我都感谢,不管是否有回复,都强烈谢谢!
      

  6.   

    beyond_xiruo(Java/.NET两手抓,两手都要硬)
    你的方法也很不错,我正在结合你们的code改进中..........
      

  7.   

    beyond_xiruo(Java/.NET两手抓,两手都要硬): 
    img2 = this.getImage(this.getCodeBase(), "f.jpg");
    int width = img2.getWidth(null);
            int height = img2.getHeight(null);        im = this.createImage(width, height); //建立新的图片,用于输入文字,以便接下来进行透明处理
            Graphics g2 = im.getGraphics();
    //        g2.setFont(new Font("宋体", Font.BOLD, 15));
    //        g2.drawString("半透明文字", 10, 50);
            g2.drawImage(img2, 0, 0, this); //我现在加的
            imgf = new myImage(100, 100, 100); //调用自定义类进行对象构造
    ---------------------------
    显示结果是前面的图片全部透明了(他的前景和背景都透明了),如何区分他的前景和背景,做到背景透明前景不变呢!
    如何才能做到:
    1. 生成透明区域为黑色,其它区域保持不变的位图
    2. 透明部分保持屏幕不变,其它部分变成黑色
    3. "或"运算,生成最终效果
      

  8.   

    我也遇到和你差不多的问题,我是在Applet中,树是从数据库中读数据生成的,但背景也要插入图片,不知道该怎么插呀,试了长时间了,郁闷中!
      

  9.   

    beyond_xiruo(Java/.NET两手抓,两手都要硬): 
    img2 = this.getImage(this.getCodeBase(), "f.jpg");
    int width = img2.getWidth(null);
            int height = img2.getHeight(null);        im = this.createImage(width, height); //建立新的图片,用于输入文字,以便接下来进行透明处理
            Graphics g2 = im.getGraphics();
    //        g2.setFont(new Font("宋体", Font.BOLD, 15));
    //        g2.drawString("半透明文字", 10, 50);
            g2.drawImage(img2, 0, 0, this); //我现在加的
            imgf = new myImage(100, 100, 100); //调用自定义类进行对象构造
    ---------------------------
    显示结果是前面的图片全部透明了(他的前景和背景都透明了),如何区分他的前景和背景,做到背景透明前景不变呢!
    如何才能做到:
    1. 生成透明区域为黑色,其它区域保持不变的位图
    2. 透明部分保持屏幕不变,其它部分变成黑色
    3. "或"运算,生成最终效果
      

  10.   

    to  Wkenny(小凳子) 
     其实当明我就是用了一个取巧的办法:用了一个SWING包中的一个JLayeredPane
    把那个图片作在后边,前边用TREE,,实际上,那个图片上我不用布局管理器,直接用setBounds,作了两列的图片,刚好可以使TREE盖住那个后排的图片,等到tree展开时,正好可以看到第二排的图片,,由于TREE的展开是一样的等距,所以当时我只是在Point定位上花了很长时间,,
      

  11.   

    jpg是不支持透明的图象格式,用GIF才可以