下面的代码图像是出来了
可惜没有透明,只是前面的图片有些改变
一起讨论讨论吧!
挺有意思的
/*
* @(#)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);
}
}
可惜没有透明,只是前面的图片有些改变
一起讨论讨论吧!
挺有意思的
/*
* @(#)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);
}
}
http://www.csdn.net/develop/read_article.asp?id=16488
对图片透明,不知道怎么实现了
如下面的代码就实现了对蓝色的透明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);
}
}
你所提到的文档抓下代码试过了
文字的透明化也只是单一颜色的处理
那如果对于图片这样多颜色的怎么处理呢?
楼主的目的是透明化一张图片
请指点。
----------------------------- 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
你的方法也很不错,我正在结合你们的code改进中..........
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. "或"运算,生成最终效果
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. "或"运算,生成最终效果
其实当明我就是用了一个取巧的办法:用了一个SWING包中的一个JLayeredPane
把那个图片作在后边,前边用TREE,,实际上,那个图片上我不用布局管理器,直接用setBounds,作了两列的图片,刚好可以使TREE盖住那个后排的图片,等到tree展开时,正好可以看到第二排的图片,,由于TREE的展开是一样的等距,所以当时我只是在Point定位上花了很长时间,,