MIDP 2.0 新增了 Alpha 混合特性,開發者可利用此特性對圖片進行半透明處理。本文結合具體範例,詳細闡述 Alpha 混合的運作原理與應用方式。
根據 MIDP 2.0 JavaDoc:
public static Image createRGBImage(int[] rgb,
int width, int height, boolean processAlpha)
從 RGB 陣列建立不可修改圖片。陣列元素格式為 0xAARRGGBB,AA 為透明度(00 全透明,FF 全不透明)。processAlpha 參數決定是否處理 Alpha 通道。
public void getRGB(int[] rgbData, int offset, int scanlength,
int x, int y, int width, int height)
從圖片指定區域讀取 ARGB 像素值至陣列。
public void drawRGB(int[] rgbData, int offset, int scanlength,
int x, int y, int width, int height, boolean processAlpha)
在指定區域繪製裝置無關的 RGB+Alpha 像素值。同樣採用 0xAARRGGBB 格式,processAlpha 控制是否套用混合。
範例載入一張背景圖,並在其上方繪製半透明紅色遮罩,透過執行緒逐漸增加遮罩高度,形成淡入效果。
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);
}
}
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 混合,並妥善處理不支援時的降級策略。