`

Java将彩色图片转换为灰色图片

    博客分类:
  • Java
阅读更多
import java.applet.*;
import java.awt.*;
import java.awt.image.*;

@SuppressWarnings("serial")
public class ChangeImageColor extends Applet {
	/** 灰度变换的算法其实很简单,只要提取每个象素点的红、绿、蓝三原色,然后根据公式:灰度值= 红色亮度值*30%+绿色亮 度值*59%+蓝色亮度值*11%,计算出一个灰度值,并将其作为 红,绿,蓝三原色的新值重新写回显存即可。 */
	Image art, Buf;
	int onced = 0;
	boolean is_color = true;
	Graphics Bufg;//使用双缓冲区技术抑制闪烁;
	Dimension xy = null;

	public void init() {
		art = getImage(getDocumentBase(), "test2.png");
		resize(640, 480);//装入图片;
	}

	public void paint(Graphics g) {
		g.setColor(new Color(0xffffff));
		g.fillRect(0, 0, getWidth(), getHeight());
		if (onced == 0)
		//如果是第一次装入图片,则直接显示;
		{
			g.drawImage(art, 0, 0, this);
		}
		if ((onced == 1) || (onced == 2))
		//如果正在进行灰度变换,则提示等待;
		{
			g.setColor(new Color(255, 200, 0));
			g.drawString("running!", 1, 30);
		}
		if (onced == 3)
		//如果灰度变换完毕,则显示结果;
		{
			if (is_color)
				g.drawImage(Buf, 0, 0, this);
			else
				g.drawImage(art, 0, 0, this);
			is_color = !is_color;//在彩色与黑白之间变化;
		}
	}

	public boolean mouseDown(Event evt, int x, int y) {
		if (onced == 0) {
			onced = 1;
		}
		repaint();//用鼠标触发事件;
		return true;
	}

	public boolean mouseUp(Event evt, int x, int y) {
		if (onced == 1) {
			onced = 2;
			int wd = art.getWidth(this); //取得图片宽;
			int ht = art.getHeight(this);//取得图片高;
			GetPixels(art, 0, 0, wd, ht);//调用灰度变换方法;
		}
		return true;
	}

	public void GetPixels(Image img, int x, int y, int w, int h) {
		int[] pixels = new int[w * h];
		//定义一块内存空间;
		PixelGrabber pg = new PixelGrabber(img, x, y, w, h, pixels, 0, w);
		try {
			pg.grabPixels();
		} catch (InterruptedException e) {
			System.err.println("interrupted waiting for pixels!");
			return;
		}
		for (int i = 0; i < h; i++) {
			for (int j = 0; j < w; j++) {
				// 获得像素的颜色
				int color = pixels[w * i + j];
				int alpha = (color & 0xFF000000) >> 24;
				int red = (int) (((color & 0x00FF0000) >> 16) * 0.3);
				int green = (int) (((color & 0x0000FF00) >> 8) * 0.59);
				int blue = (int) ((color & 0x000000FF) * 0.11);
				color = red + green + blue;
				color = (alpha << 24) | (color << 16) | (color << 8) | color;
				//System.out.println(Integer.toHexString(color));
				//由红,绿,蓝值得到灰度值;
				pixels[w * i + j] = color;
			}
		}
		Image pic = createImage(new MemoryImageSource(w, h, pixels, 0, w));
		Bufg.drawImage(pic, 0, 0, this); //显示黑白图片;
		onced = 3;
		repaint();
	}

	public void update(Graphics g) {
		if (xy == null) {
			xy = getSize();
			Buf = createImage(xy.width, xy.height);
			Bufg = Buf.getGraphics();
		}
		paint(g);//修改update方法,避免闪烁;
	}
}

 

分享到:
评论
1 楼 huangbq 2010-11-17  
学习了!最近在做一个类似荧光棒的小应用,正需要图片颜色变换的方法,多谢分享!问一下:这个方法应该能实现彩色闪烁效果吧?

相关推荐

    Java彩色图片转换黑白(灰度图).rar

    总的来说,将Java彩色图片转换为黑白(灰度图)涉及的关键知识点包括: 1. Java AWT和Swing库的`BufferedImage`类 2. 图像像素的RGB表示法 3. 灰度图像转换算法 4. 图像缓冲区操作 5. 使用`Graphics`对象绘制图像 ...

    Java将彩色图像转换为灰度图

    Java将彩色图像转换为灰度图,本程序利用缓冲区图像实例了图像的灰化处理,效果如上图所示,当单击“Gray Image”按钮后,显示了灰化处理后的图像;当再单击“Reset”按钮后,显示源图像。具体来说是利用java.awt....

    java 图片 变灰 源码

    在Java编程语言中,处理图像是一项常见的任务,其中包括将彩色图片转换为灰度图片。"java 图片 变灰 源码" 提供了一个工具类,用于实现这个功能,同时还包括一个用户界面示例,这可以让我们看到类似QQ头像的在线和...

    彩色图片转成灰阶(12KB)

    在图像处理领域,将彩色图片转换为灰阶图像是一种常见的操作。这主要涉及到色彩空间的转换,其中最常见的是从RGB(红绿蓝)色彩空间转换到灰度色彩空间。RGB色彩模型是基于三种基本颜色——红色、绿色和蓝色的组合来...

    Java图像变灰 及相关类ColorSpace,ColorConvertOp

    在Java编程语言中,处理图像是一项常见的任务,其中包括将彩色图像转换为灰度图像。"Java图像变灰及相关类ColorSpace,ColorConvertOp"这个标题提到了两个关键概念:ColorSpace(颜色空间)和ColorConvertOp(颜色...

    ColorMatrixDemo:实现类似QQ离线用户头像彩色变灰色的效果

    "ColorMatrixDemo" 是一个项目名称,主要目标是实现一种特定的图像处理效果,即“彩色变灰色”,类似于QQ中显示离线用户头像时将彩色头像转换为灰色头像的功能。这涉及到图像处理和颜色空间转换的原理。 【描述解析...

    opencv操作银行卡图片识别数字

    这里提到的"将图片处理成灰色",就是将彩色图像转换为灰度图像,减少颜色信息,降低计算复杂度,同时有助于突出图像的纹理和形状特征。 4. **腐蚀操作**:腐蚀是形态学图像处理中的一个基本操作,用于消除小的噪声...

    android获取灰度图片

    在Android开发中,有时需要将彩色图片转换为灰度图片,以实现特定的功能或视觉效果。例如,在即时通讯应用中,通常会用彩色头像表示用户在线状态,而用灰度头像表示离线状态。这种方式能够直观地传达用户的在线状态...

    AndroidProj:我为练习而创建的一些Android项目。 部分代码来自其他开源项目-android source code

    AndroidProj 我为练习而创建的一些... 通过单击按钮将图像转换为灰度。 需要OpenCV-android-sdk,Android NDK。 灰色滑杆: 通过滑动滑块在彩色和灰度之间转换图像。 Requres JavaCV和OpenCV(带有Java API)。

    HTML Snapshot ActiveX控件

    MakeGrayImage(String strInputFile, String strOutputFile, Long bGrayOrBW):将图象颜色转换成灰色或黑白色; SetCode(String strCode):设置注册码(试用版); SetTimeOut(Long nTimeOut):超时值为SnapUrl毫秒...

    android图片圆角、图片去色处理示例

    接着,我们来看图片去色处理,即把彩色图片转换为灰度图片。这可以通过调整图片的颜色饱和度来实现。`toGrayscale`方法接受一个`Bitmap`对象`bmpOriginal`作为参数。这里使用了`ColorMatrix`和`...

    javascript图片相似度算法实现 js实现直方图和向量算法

    `gray`函数则是将图片转换为灰度图像。这个过程简单地将每个像素的红、绿、蓝通道值平均,然后用这个平均值替换原色值。这样处理后,无论原图是彩色还是灰色,都可以将其转换为统一的灰度表示,便于后续的相似度比较...

    网页设计复习资料试卷及答案.pdf

    2. **域名系统**:DNS(Domain Name System)采用层次型命名机制,将易于记忆的域名转换为IP地址。 3. **IP地址**:IP地址分为两部分,IPv4中通常分为四段,每段由0-255的数字组成,总共三个层次。 4. **网站结构*...

Global site tag (gtag.js) - Google Analytics