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

MIDP 2.0 新特性:Alpha 混合詳解與實作範例

     編輯:J2ME

前言

MIDP 2.0 新增了 Alpha 混合特性,開發者可利用此特性對圖片進行半透明處理。本文結合具體範例,詳細闡述 Alpha 混合的運作原理與應用方式。

Alpha 處理規範說明

根據 MIDP 2.0 JavaDoc:

  • 可修改圖片(Mutable Image)中的每個像素必須為完全不透明。
  • 不可修改圖片(Immutable Image)中的像素可以是完全透明、完全不透明,或介於兩者之間的半透明。
  • 系統實作必須支援儲存、處理與繪製完全透明與完全不透明的像素。
  • 從資料來源(PNG 或位元組陣列)建立圖片時,原圖的不透明與透明像素應保持不變。
  • 半透明像素的處理取決於系統是否支援 Alpha 混合:支援則保持半透明(數值可能依支援等級調整),不支援則以完全透明像素取代。

核心 API 介紹

Image.createRGBImage()

public static Image createRGBImage(int[] rgb,
    int width, int height, boolean processAlpha)

從 RGB 陣列建立不可修改圖片。陣列元素格式為 0xAARRGGBB,AA 為透明度(00 全透明,FF 全不透明)。processAlpha 參數決定是否處理 Alpha 通道。

Image.getRGB()

public void getRGB(int[] rgbData, int offset, int scanlength,
    int x, int y, int width, int height)

從圖片指定區域讀取 ARGB 像素值至陣列。

Graphics.drawRGB()

public void drawRGB(int[] rgbData, int offset, int scanlength,
    int x, int y, int width, int height, boolean processAlpha)

在指定區域繪製裝置無關的 RGB+Alpha 像素值。同樣採用 0xAARRGGBB 格式,processAlpha 控制是否套用混合。

實作範例:半透明遮罩動畫

範例載入一張背景圖,並在其上方繪製半透明紅色遮罩,透過執行緒逐漸增加遮罩高度,形成淡入效果。

核心繪製邏輯 (paint 方法)

public void paint(Graphics g) {
    g.setColor(255, 255, 255);
    g.fillRect(0, 0, getWidth(), getHeight());
    g.drawImage(backgroundImage, x, y, Graphics.TOP | Graphics.LEFT);

    if (maskHeight != 0) {
        g.drawRGB(maskArray, 0, imageWidth, x, y, imageWidth, maskHeight, true);
    }
}

動畫執行緒 (run 方法)

public void run() {
    for (int i = 1; i <= imageHeight; i++) {
        maskHeight = i;
        repaint();
        try { Thread.sleep(50); }
        catch (InterruptedException e) {}
    }
}

完整原始碼結構

程式包含 AlphaBlending (MIDlet 主類別) 與 AlphaCanvas (Canvas 實作 Runnable) 兩個類別。AlphaCanvas 建構子中載入背景圖、建立半透明紅色遮罩陣列(Alpha 係數 0x11 ≈ 0.3),並在 run() 中驅動動畫。

結語

Alpha 混合為 MIDP 2.0 帶來豐富的視覺效果可能,善用 drawRGB() 即可輕鬆實現半透明覆蓋、淡入淡出等效果。開發時需注意目標裝置是否支援 Alpha 混合,並妥善處理不支援時的降級策略。

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