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方法,避免闪烁;
}
}
分享到:
相关推荐
总的来说,将Java彩色图片转换为黑白(灰度图)涉及的关键知识点包括: 1. Java AWT和Swing库的`BufferedImage`类 2. 图像像素的RGB表示法 3. 灰度图像转换算法 4. 图像缓冲区操作 5. 使用`Graphics`对象绘制图像 ...
Java将彩色图像转换为灰度图,本程序利用缓冲区图像实例了图像的灰化处理,效果如上图所示,当单击“Gray Image”按钮后,显示了灰化处理后的图像;当再单击“Reset”按钮后,显示源图像。具体来说是利用java.awt....
在Java编程语言中,处理图像是一项常见的任务,其中包括将彩色图片转换为灰度图片。"java 图片 变灰 源码" 提供了一个工具类,用于实现这个功能,同时还包括一个用户界面示例,这可以让我们看到类似QQ头像的在线和...
在图像处理领域,将彩色图片转换为灰阶图像是一种常见的操作。这主要涉及到色彩空间的转换,其中最常见的是从RGB(红绿蓝)色彩空间转换到灰度色彩空间。RGB色彩模型是基于三种基本颜色——红色、绿色和蓝色的组合来...
在Java编程语言中,处理图像是一项常见的任务,其中包括将彩色图像转换为灰度图像。"Java图像变灰及相关类ColorSpace,ColorConvertOp"这个标题提到了两个关键概念:ColorSpace(颜色空间)和ColorConvertOp(颜色...
"ColorMatrixDemo" 是一个项目名称,主要目标是实现一种特定的图像处理效果,即“彩色变灰色”,类似于QQ中显示离线用户头像时将彩色头像转换为灰色头像的功能。这涉及到图像处理和颜色空间转换的原理。 【描述解析...
这里提到的"将图片处理成灰色",就是将彩色图像转换为灰度图像,减少颜色信息,降低计算复杂度,同时有助于突出图像的纹理和形状特征。 4. **腐蚀操作**:腐蚀是形态学图像处理中的一个基本操作,用于消除小的噪声...
在Android开发中,有时需要将彩色图片转换为灰度图片,以实现特定的功能或视觉效果。例如,在即时通讯应用中,通常会用彩色头像表示用户在线状态,而用灰度头像表示离线状态。这种方式能够直观地传达用户的在线状态...
AndroidProj 我为练习而创建的一些... 通过单击按钮将图像转换为灰度。 需要OpenCV-android-sdk,Android NDK。 灰色滑杆: 通过滑动滑块在彩色和灰度之间转换图像。 Requres JavaCV和OpenCV(带有Java API)。
MakeGrayImage(String strInputFile, String strOutputFile, Long bGrayOrBW):将图象颜色转换成灰色或黑白色; SetCode(String strCode):设置注册码(试用版); SetTimeOut(Long nTimeOut):超时值为SnapUrl毫秒...
接着,我们来看图片去色处理,即把彩色图片转换为灰度图片。这可以通过调整图片的颜色饱和度来实现。`toGrayscale`方法接受一个`Bitmap`对象`bmpOriginal`作为参数。这里使用了`ColorMatrix`和`...
`gray`函数则是将图片转换为灰度图像。这个过程简单地将每个像素的红、绿、蓝通道值平均,然后用这个平均值替换原色值。这样处理后,无论原图是彩色还是灰色,都可以将其转换为统一的灰度表示,便于后续的相似度比较...
2. **域名系统**:DNS(Domain Name System)采用层次型命名机制,将易于记忆的域名转换为IP地址。 3. **IP地址**:IP地址分为两部分,IPv4中通常分为四段,每段由0-255的数字组成,总共三个层次。 4. **网站结构*...