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

J2ME 半透明圖片產生器:11 級 Alpha 混合工具方法

     編輯:J2ME

J2ME 標準 API 無直接建立半透明圖片的方法,但可透過像素陣列操作實現。本文提供一個靜態工具方法,依指定透明度 (0-10 共 11 級) 產生半透明版本圖片。

完整工具方法


import javax.microedition.lcdui.Image;

/**
 * 產生半透明圖片
 * @param src 來源圖片
 * @param level 透明度等級 0-10 (0=全透明, 10=不透明)
 * @return 新 Image 物件,輸入無效回傳 null
 */
public static Image createAlphaImage(Image src, int level) {
    if (src == null) {
        System.out.println("createAlphaImage: src is null");
        return null;
    }

    // 邊界修正
    if (level < 0) level = 0;
    else if (level > 10) level = 10;

    int w = src.getWidth();
    int h = src.getHeight();
    int[] rgb = new int[w * h];

    // 取得原始像素 (0xAARRGGBB)
    src.getRGB(rgb, 0, w, 0, 0, w, h);

    // 計算目標 Alpha 值 (0-255)
    int alpha = (level * 255) / 10;
    // 建立遮罩:高 8 位為 alpha,低 24 位全 1 (保留 RGB)
    int mask = (alpha << 24) | 0x00FFFFFF;

    // 套用 Alpha:保留原 RGB,強制設定 Alpha
    for (int i = 0; i < rgb.length; i++) {
        rgb[i] = (rgb[i] & 0x00FFFFFF) | (alpha << 24);
        // 等價於:rgb[i] &= mask; 但更明確
    }

    // 建立新圖片,processAlpha=true 關鍵!
    return Image.createRGBImage(rgb, w, h, true);
}

核心技術解析

  1. 像素格式 0xAARRGGBB:32 位整數,Alpha 佔高 8 位 (bits 24-31)
  2. 等級映射:alpha = level * 255 / 10,0→0, 5→127, 10→255
  3. 位運算技巧:
    • rgb[i] & 0x00FFFFFF:清除原 Alpha,保留 RGB
    • | (alpha << 24):寫入新 Alpha
  4. createRGBImage 關鍵參數:第四個參數 processAlpha=true,否則 Alpha 通道會被忽略

使用範例


// 載入原圖
Image original = Image.createImage("/sprite.png");

// 產生 50% 半透明版本
Image halfAlpha = createAlphaImage(original, 5);

// 繪製時會自動混合背景
g.drawImage(halfAlpha, x, y, Graphics.TOP | Graphics.LEFT);

效能與記憶體考量

  • 記憶體:需配置 w*h*4 bytes 像素陣列 + 新 Image,大圖片請謹慎使用
  • 運算成本:單次 O(w*h) 迴路,建議在初始化階段預生成,避免渲染迴路中重複計算
  • 快取策略:可建立 Hashtable 或陣列快取不同等級的結果,cache[level] 直接複用

擴展應用

  • 淡入/淡出動畫:逐幀遞增/遞減 level 並重繪
  • 陰影效果:將圖片產生低 Alpha 版本,偏移繪製形成投影
  • UI 遮罩:彈出選單時將背景圖產生半透明版本覆蓋

這個小工具方法雖簡單,卻是 J2ME 視覺特效庫的基石組件,掌握像素級 Alpha 操作能解鎖豐富的 UI 表現力。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved