首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2ME

MIDP 2.0 像素級圖像處理實戰:半透明效果實現與 ARGB 位元操作詳解

     編輯:J2ME

MIDP 2.0 像素操作基礎

MIDP 2.0 提供 Image.getRGB() 與 Graphics.drawRGB() 實現像素級讀寫。每像素為 32 位 ARGB 格式:0xAARRGGBB(Alpha 佔最高 8 位)。

關鍵位元運算子

  • >> 右移(無號右移用 >>>)
  • << 左移
  • & 位元 AND
  • | 位元 OR

半透明效果實現原理

  1. 取得像素陣列:image.getRGB(argb, 0, w, 0, 0, w, h)
  2. 提取 Alpha:int a = (argb[i] >> 24) & 0xFF
  3. 設定新 Alpha(0~255,0 全透明,255 不透明):argb[i] = (newAlpha << 24) | (argb[i] & 0x00FFFFFF)
  4. 繪製修改後像素:g.drawRGB(argb, 0, w, x, y, w, h, true)

完整程式碼範例

public class TCanvas extends Canvas {
    private Image image;
    private int[] argb;
    
    public TCanvas() {
        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());
        
        int alpha = 100; // 設定半透明度 (0-255)
        for (int i = 0; i < argb.length; i++) {
            argb[i] = (alpha << 24) | (argb[i] & 0x00FFFFFF);
        }
    }
    
    protected void paint(Graphics g) {
        // 先畫背景圖以觀察半透明疊加效果
        g.drawImage(image, 0, 0, Graphics.TOP | Graphics.LEFT);
        // 再畫半透明像素陣列(偏移 100 像素避免完全重疊)
        g.drawRGB(argb, 0, image.getWidth(), 0, 100, 
                  image.getWidth(), image.getHeight(), true);
    }
}

擴展應用:灰階、色調轉換

同樣在迴圈中操作 RGB 分量:

  • 灰階:int gray = (r + g + b) / 3; argb[i] = (a<<24) | (gray<<16) | (gray<<8) | gray;
  • 色調偏移:對 R/G/B 分別乘係數或加常數

效能提醒

  • 像素迴圈屬 CPU 密集運算,大圖處理會明顯卡頓
  • 遊戲主迴圈中避免每幀重複處理,預處理快取結果
  • 可考慮離線工具預產生處理後圖片,執行時直接載入
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved