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

J2ME 圖集分割技術:setClip 切分大圖與透明像素保護方案

     編輯:J2ME

動機

將眾多小圖打包成單張大圖(圖集/Texture Atlas)減少 JAR 數量與載入開銷。運行時需將大圖切回獨立 Image 對象供邏輯直接繪製。

標準分割代碼

Image[] digits = new Image[10];

private void initDigits() throws IOException {
    Image atlas = Image.createImage("/atlas.png"); // 100×15
    Graphics g;
    for (int i = 0; i < 10; i++) {
        digits[i] = Image.createImage(10, 15);     // 目標小圖
        g = digits[i].getGraphics();
        g.drawImage(atlas, -i * 10, 0, Graphics.TOP | Graphics.LEFT);
    }
}

原理:負座標繪製相當於源圖向右平移,配合目標圖尺寸自動裁剪。

MIDP 1.0 透明像素丟失問題

MutableImage.getGraphics().drawImage 在 MIDP 1.0 實現中會丟棄 Alpha 通道。

方案一:運行時 setClip 直繪大圖

不分割,渲染時動態設置裁剪區域:g.setClip(x, y, w, h); g.drawImage(atlas, 0, 0, ...)。零額外內存,但每繪製一次需調用 setClip。

方案二:諾基亞專有 DirectUtils.createImage(w, h, 0)

// 第三個參數 0 表示透明背景(Nokia UI 延伸)
digits[i] = DirectUtils.createImage(10, 15, 0);
g = digits[i].getGraphics();
g.drawImage(atlas, -i * 10, 0, 20);

生成帶 Alpha 的可變圖像,完美保留透明像素。僅限諾基亞機型。

工程建議

  • MIDP 2.0 環境 Image.createImage(src, x, y, w, h, transform) 原生支援子圖創建且保留 Alpha,優先使用。
  • 需支援 MIDP 1.0 時:諾基亞機型用方案二,其他機型退回方案一或預處理打包單張圖。
  • 圖集排版建議網格對齊,便於索引計算與美術協作。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved