將一張不透明圖片從完全透明(Alpha=0)逐漸變為原始不透明度(Alpha=255),產生淡入動畫。核心同「MIDP 2.0 圖片像素操作」一文的案例一,此處精簡呈現關鍵邏輯。
public class ShadowMIDlet extends MIDlet {
Canvas c = new ShadowCanvas();
protected void startApp() { Display.getDisplay(this).setCurrent(c); }
protected void pauseApp() {}
protected void destroyApp(boolean u) {}
}
class ShadowCanvas extends Canvas implements Runnable {
int w, h;
Image srcImage;
int[] srcRgb, shadowRgb;
int imgW, imgH, count;
public ShadowCanvas() {
w = getWidth(); h = getHeight();
try { srcImage = Image.createImage("/av.png"); }
catch (IOException e) { e.printStackTrace(); }
imgW = srcImage.getWidth(); imgH = srcImage.getHeight();
srcRgb = new int[imgW * imgH];
srcImage.getRGB(srcRgb, 0, imgW, 0, 0, imgW, imgH);
shadowRgb = new int[srcRgb.length];
System.arraycopy(srcRgb, 0, shadowRgb, 0, shadowRgb.length);
// 全透明初始化
for (int i=0;i>> 24;
int targetAlpha = (srcRgb[i] & 0xFF000000) >>> 24;
if (alpha < targetAlpha) {
shadowRgb[i] = ((alpha+1) << 24) | (shadowRgb[i] & 0x00FFFFFF);
changed = true;
}
}
try { Thread.sleep(10); } catch (InterruptedException e) {}
count++; repaint();
if (!changed) { System.out.println("over"); break; }
}
}
}



getRGB 取得 ARGB 陣列,最高 8 bits 為 Alpha。& 0x00FFFFFF 清除 Alpha(設為 0),| (alpha<<24) 設定新 Alpha。drawRGB(..., true) 最後一參 true 表示資料含 Alpha 通道。changed 標記避免所有像素達標後繼續空跑執行緒。