MIDP2.0中对图片象素级处理(3)

在我们的游戏里面经常会需要把当前的场景绘制成一个灰度的场景,比如说当角色死亡的时候没,我们会把场景弄成一个灰色,那么怎么实现一个灰色的场景呢,一个办法就是做一个灰色的图片,把他画上去,但是这样会占用我们JAR文件的大小,那么我们现在来了解一下怎么把一个彩色的图片绘制成一个灰色的图片。

我们的灰度图片和彩色图片一样,也是由RGB三原色组成的,但是灰度图片有一个特点,那就是他的RGB3个值是相等的,但是我们的彩色图片RGB3个值之间没有特别的关系,所以我们要做的就是把彩色图片中RGB3个值改成一个相等的值,改成一个什么样的值呢,我们只要求出彩色图片的RGB3个值的平均值,然后把RGB都改成这个平均值就好了。

先取出RGB3个值

r = (argb[i] & 0x00FF0000)>>16;//获得red

g = (argb[i] & 0x0000ff00)>>8;//获得green

b = argb[i] & 0x000000ff;//获得blue

然后求r,g,b的平均值

temp = (r+g+b)/3;

再合并出新的象素值:

r = temp<<16;

g = temp<<8;

b = temp;

argb[i] = 0xff000000 | r | g | b;//合并3个色彩

最后把修改后的这个RGB数组绘制出来就ok

import java.io.IOException;

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;


/**
 * @author 刘军
 * @version 1.0
 */
public class TCanvas extends Canvas{
 Image image;//要处理的图片
 int argb[];
 int a= 0;//把象素的透明度初始值设置为0,然后在线程中不断地增加这个值
 public TCanvas() {
  super();
  try {
   image = Image.createImage("/test.png");//导入图片
  } catch (IOException e) {
   e.printStackTrace();
  }
  argb = new int[image.getWidth()*image.getHeight()];
  image.getRGB(argb,0,image.getWidth(),0,0,image.getWidth(),image.getHeight());//获得图片的ARGB值
  int temp;
  int r,g,b;
  
  for(int i=0;i<argb.length;i++)
  {
   r = (argb[i] & 0x00FF0000)>>16;//获得red值
   g = (argb[i] & 0x0000ff00)>>8;//获得green值
   b = argb[i] & 0x000000ff;//获得blue值
   temp = (r+g+b)/3;//求他们的平均值,并把r,g,b的值都等于这个值,当RGB三个值相等的时候这个象素的色彩就是灰度的了
   r = temp<<16;
   g = temp<<8;
   b = temp;
   argb[i] = 0xff000000 | r | g | b;//合并3个色彩
  }
 }

 protected void paint(Graphics g) {
  g.setColor(0xffffff);
  g.fillRect(0,0,getWidth(),getHeight());
  g.setColor(0);
  g.drawImage(image,0,0,Graphics.TOP|Graphics.LEFT);
  g.drawRGB(argb,0,image.getWidth(),0,100,image.getWidth(),image.getHeight(),true);// 画象素数组
  g.drawString(a+"",10,90,Graphics.TOP|Graphics.LEFT);
 }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值