程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> MIDP2.0中圖片象素級處理之半透明處理

MIDP2.0中圖片象素級處理之半透明處理

編輯:J2ME
MIDP2.0中供給了對圖片的象素級的處理,利用這一點,我們可以對圖片進行相干的處理,比如半透明,把彩色圖片處理成灰度圖片,以及圖片變色後果都可以在J2ME裡很方便地實現。
 
  在進行這些把持之前,我們必需先懂得Java中的一些位把持符:

  <<,>>,&,|,重要是這幾個把持符,下面我們就開端我們的把持

  1、半透明處理

  在PNG裡每個象素是一個ARBG格局,是一個8位的十六進制的數字,比如0xff121212,這個東西描寫了圖片的一個象素,我們可以通過 Image類中的getRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height) 方法獲得一個rgbData,這個rgbData就保留了圖片所對應的象素信息,取出象素信息之後我們需要對其進行透明後果的處理,透明後果的值是保留在 8位中的最高2位,你可以把這個象素值轉換成16進制輸出,一般情況下最高2位應當都是為FF,也就是不透明,我們現在需要把這個FF改成一個比他小的值,那麼我們的圖片就透明了,最高位為00的時候圖片就全透明了。

  實在8位16進制對應了32位的2進制,那麼我們可以通過下面的方法取出他的最高2位:

  A = Argb>>24//把這個數向右移動24位,那麼剩下的8位就是我們要的最高位了

  修正之後我們再通過下面的方法可以把他存回往 Argb = a<<24 |( argb & 0x00FFFFFF);

  那麼我們通過循環把這個圖片的所有象素信息都轉變之後,在用轉變的象素信息來結構一個圖片,或者這個通過我們的Graphics 下面的drawRGB方法直接畫出來的就是一個半透明後果的圖片了,你可以在畫這個圖片之前先畫一個其他的圖片,這樣你就可以很明顯地看到後果了:


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[];
 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 a= 100;//把象素的透明度都設置為100
  for(int i=0;i<argb.length;i++)
  {
   argb[i]=(a<<24) | (argb[i] & 0x00FFFFFF);// 修正最高2位的值

 }
 }

 protected void paint(Graphics g) {
  g.drawImage(image,0,0,Graphics.TOP|Graphics.LEFT);
  g.drawRGB(argb,0,image.getWidth(),0,100,image.getWidth(),image.getHeight(),true);// 畫象素數組
 }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved