在我們游戲編程中經常會碰到一些圖片,只是顏色不同,其他的都相同,我們在MIDP1.0裡面需要做幾張這樣的圖片,那麼勢必會增加我們JAR文件的大小,在MIDP2.0裡面我們有了辦法,可以通過一張圖片變出N張不同顏色的圖片出來。
在前面我們已經了解了,怎麼樣得到一個圖片的象素,其實改變圖片的顏色也可以通過改變象素的值來實現,首先我們要獲得相應的象素的R,G,B的值,這個方法在我們處理灰度圖片的時候已經了解了:
r = (rgb[j]& 0x00ff0000)>>16;
g = (rgb[j]& 0x0000ff00)>>8;
b = rgb[j]& 0x000000ff;
得到這些方法之後我們可以把他們進行對換,這樣的話就可以得到不同顏色的圖片了,當然,你可以進行跟復雜的一些變化
temp = r;
r = b;
b = g;
g = temp;
下面我給出這個程序的完整代碼:
import Java.io.IOException;
import Javax.microedition.lcdui.Canvas;
import Javax.microedition.lcdui.Graphics;
import Javax.microedition.lcdui.Image;
public class GCanvas extends Canvas{
Image i;
int rgb[] = new int[86*50];
public GCanvas() {
super();
try {
i = Image.createImage("/h.png");
} catch (IOException e) {
e.printStackTrace();
}
i.getRGB(rgb,0,i.getWidth(),0,0,i.getWidth(),i.getHeight());
int r,g,b,avg,temp;
for(int j=0;j<rgb.length;j++)
{
r = (rgb[j]& 0x00ff0000)>>16;
g = (rgb[j]& 0x0000ff00)>>8;
b = rgb[j]& 0x000000ff;
temp = r;
r = b;
b = g;
g = temp;
rgb[j] = ((r<<16) |(g<<8)| b) | 0xff000000;
}
}
public void paint(Graphics g)
{
g.drawImage(i,0,0,0);
g.drawRGB(rgb,0,i.getWidth(),0,60,i.getWidth(),i.getHeight(),true);
}
}
最後得到的效果如下: