我支持开源,因此我会把自己未涉及公司利益的代码和思想贴出来。以前要求回复邮箱,因为我想看看有没有人要这些东西。
以前家里不能上网,只能去女朋友那蹭网,没时间维护blog,现在家里装了adsl,希望能多多的维护这个blog。
由于没什么时间,做的东西也没有去进行更多的考虑,不好的地方,希望大家指出,但千万不要拍我。
后面给出邮箱的哥们,不好意思,就不发了,自己来这看吧。其实很简单(下面的代码并没有经过仔细斟酌,效率性能方面大家可以指出问题来修改)。
以前家里不能上网,只能去女朋友那蹭网,没时间维护blog,现在家里装了adsl,希望能多多的维护这个blog。
由于没什么时间,做的东西也没有去进行更多的考虑,不好的地方,希望大家指出,但千万不要拍我。
后面给出邮箱的哥们,不好意思,就不发了,自己来这看吧。其实很简单(下面的代码并没有经过仔细斟酌,效率性能方面大家可以指出问题来修改)。
/**
* JAVA支持图像中的透明通道,所以只要设置图像的透明通道,就可以实现图像的透明效果。
* 使用BufferedImage类实现图像的透明和灰度效果。
* BufferedImage对象的创建:直接通过jdk1.5中增加的javax.imageio.ImageIO.read()方法
* 读取图像文件即可获得。
* 实现起来很简单,但其实不简单,只是因为SUN帮我们做了很多事情。
* 目前版本1.0.0,没有经过多少测试,欢迎报告bug,欢迎改进,欢迎交流。
*
* <b>所有图像格式没有考虑8位以下图像格式<b>
* <b>部分方法配有一个后缀为Ex的版本,并不是功能增强,只是指定透明色值的参数
* 类型有了变化<b>
* Email: chenhao518530@163.com
* copyright 2006 BBE&BFE(TM)
*
* @author BBE
* @version 1.0.0
* @Date 2006.12.26
* @see
*
*/
package bbe.transparence;
import javax.imageio. * ;
import java.awt.color. * ;
import java.awt. * ;
import java.awt.image. * ;
public abstract class Transparence
{
/*
* 构建imageSrc的拷贝,象素颜色为mask的显示为透明
*
* @param imageSrc 原始图像
* @param mask mask为Object的实例,因为如果imageSrc为灰度图,或者为索引颜色图,则mask应为指定
* 灰度或索引的数值。如果imageSrc是其他模式的图像,则使用一个Color对象指定颜色值
* @return 返回imageSrc的拷贝,象素颜色为mask的显示为透明
*/
public static BufferedImage createImageByMaskColor(BufferedImage imageSrc, Object mask) {
int x = imageSrc.getWidth(null);
int y = imageSrc.getHeight(null);
Raster rasterSrc = imageSrc.getRaster();
BufferedImage imageDes = new BufferedImage(x, y, BufferedImage.TYPE_4BYTE_ABGR);
WritableRaster rasterDes = imageDes.getRaster();
int[] src = null;
int[] des = new int[4];
int type = imageSrc.getType();
if (type == BufferedImage.TYPE_BYTE_GRAY) {
int cmask = (Integer)mask;
while (--x >= 0)
for (int j = 0; j < y; ++j) {
src = rasterSrc.getPixel(x, j, (int[])null);
if (src[0] == cmask)
des[3] = 0;
else {
des[0] = src[0];
des[1] = src[0];
des[2] = src[0];
des[3] = 255;
}
rasterDes.setPixel(x, j, des);
}
} else if (type == BufferedImage.TYPE_BYTE_INDEXED) {
int cmask = (Integer)mask;
ColorModel cm = imageSrc.getColorModel();
Object data = null;
while (--x >= 0)
for (int j = 0; j < y; ++j) {
src = rasterSrc.getPixel(x, j, (int[])null);
if (src[0] == cmask) { //透明
des[3] = 0;//
} else {
data = rasterSrc.getDataElements(x, j, null);
int argb = cm.getRGB(data);
Color color = new Color(argb, true);
des[0] = color.getRed();
des[1] = color.getGreen();
des[2] = color.getBlue();
des[3] = 255;
}
rasterDes.setPixel(x, j, des);
}
} else {
ColorModel cm = imageSrc.getColorModel();
Color cmask = (Color)mask;
Object data = null;
int maskR, maskG, maskB;
maskR = cmask.getRed();
maskG =
* JAVA支持图像中的透明通道,所以只要设置图像的透明通道,就可以实现图像的透明效果。
* 使用BufferedImage类实现图像的透明和灰度效果。
* BufferedImage对象的创建:直接通过jdk1.5中增加的javax.imageio.ImageIO.read()方法
* 读取图像文件即可获得。
* 实现起来很简单,但其实不简单,只是因为SUN帮我们做了很多事情。
* 目前版本1.0.0,没有经过多少测试,欢迎报告bug,欢迎改进,欢迎交流。
*
* <b>所有图像格式没有考虑8位以下图像格式<b>
* <b>部分方法配有一个后缀为Ex的版本,并不是功能增强,只是指定透明色值的参数
* 类型有了变化<b>
* Email: chenhao518530@163.com
* copyright 2006 BBE&BFE(TM)
*
* @author BBE
* @version 1.0.0
* @Date 2006.12.26
* @see
*
*/
package bbe.transparence;
import javax.imageio. * ;
import java.awt.color. * ;
import java.awt. * ;
import java.awt.image. * ;
public abstract class Transparence
{
/*
* 构建imageSrc的拷贝,象素颜色为mask的显示为透明
*
* @param imageSrc 原始图像
* @param mask mask为Object的实例,因为如果imageSrc为灰度图,或者为索引颜色图,则mask应为指定
* 灰度或索引的数值。如果imageSrc是其他模式的图像,则使用一个Color对象指定颜色值
* @return 返回imageSrc的拷贝,象素颜色为mask的显示为透明
*/
public static BufferedImage createImageByMaskColor(BufferedImage imageSrc, Object mask) {
int x = imageSrc.getWidth(null);
int y = imageSrc.getHeight(null);
Raster rasterSrc = imageSrc.getRaster();
BufferedImage imageDes = new BufferedImage(x, y, BufferedImage.TYPE_4BYTE_ABGR);
WritableRaster rasterDes = imageDes.getRaster();
int[] src = null;
int[] des = new int[4];
int type = imageSrc.getType();
if (type == BufferedImage.TYPE_BYTE_GRAY) {
int cmask = (Integer)mask;
while (--x >= 0)
for (int j = 0; j < y; ++j) {
src = rasterSrc.getPixel(x, j, (int[])null);
if (src[0] == cmask)
des[3] = 0;
else {
des[0] = src[0];
des[1] = src[0];
des[2] = src[0];
des[3] = 255;
}
rasterDes.setPixel(x, j, des);
}
} else if (type == BufferedImage.TYPE_BYTE_INDEXED) {
int cmask = (Integer)mask;
ColorModel cm = imageSrc.getColorModel();
Object data = null;
while (--x >= 0)
for (int j = 0; j < y; ++j) {
src = rasterSrc.getPixel(x, j, (int[])null);
if (src[0] == cmask) { //透明
des[3] = 0;//
} else {
data = rasterSrc.getDataElements(x, j, null);
int argb = cm.getRGB(data);
Color color = new Color(argb, true);
des[0] = color.getRed();
des[1] = color.getGreen();
des[2] = color.getBlue();
des[3] = 255;
}
rasterDes.setPixel(x, j, des);
}
} else {
ColorModel cm = imageSrc.getColorModel();
Color cmask = (Color)mask;
Object data = null;
int maskR, maskG, maskB;
maskR = cmask.getRed();
maskG =