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

MIDP 2.0 影像像素級處理 (一):ARGB 基礎與半透明效果入門

     編輯:Java 相關知識

前言

MIDP 2.0 引入 Image.getRGB() 與 Graphics.drawRGB(),開啟像素級影像處理大門。本文為系列首篇,建立 ARGB 位元操作基礎,實作半透明效果。

位元操作基礎

32 位 ARGB 像素結構:0xAARRGGBB

通道位位置遮罩提取方式
Alpha31-240xFF000000(argb >> 24) & 0xFF
Red23-160x00FF0000(argb >> 16) & 0xFF
Green15-80x0000FF00(argb >> 8) & 0xFF
Blue7-00x000000FFargb & 0xFF

常用運算子:>> (有號右移)、<< (左移)、& (位元 AND)、| (位元 OR)

半透明實作步驟

  1. 取得像素陣列: image.getRGB(rgbData, offset, scanlength, x, y, width, height)
  2. 修改 Alpha 通道: 將最高 8 位從 0xFF (不透明) 改為較小值 (如 0x80 50% 透明)
  3. 重組像素: argb = (newAlpha << 24) | (argb & 0x00FFFFFF)
  4. 繪製結果: g.drawRGB(rgbData, offset, scanlength, x, y, width, height, processAlpha)

完整範例程式碼

import java.io.IOException;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;

public class AlphaCanvas extends Canvas {
    Image image;
    int[] argb;
    int alpha = 0x80; // 50% 透明

    public AlphaCanvas() {
        try {
            image = Image.createImage("/test.png");
        } catch (IOException e) {
            e.printStackTrace();
        }
        argb = new int[image.getWidth() * image.getHeight()];
        image.getRGB(argb, 0, image.getWidth(), 0, 0,
                     image.getWidth(), image.getHeight());

        // 批次修改 Alpha
        for (int i = 0; i < argb.length; i++) {
            argb[i] = (alpha << 24) | (argb[i] & 0x00FFFFFF);
        }
    }

    protected void paint(Graphics g) {
        g.setColor(0xFFFFFF);
        g.fillRect(0, 0, getWidth(), getHeight());
        g.drawImage(image, 0, 0, Graphics.TOP | Graphics.LEFT); // 底圖
        g.drawRGB(argb, 0, image.getWidth(), 0, 100,
                  image.getWidth(), image.getHeight(), true);    // 半透明疊加
    }
}

效果展示

半透明效果示意圖

下方圖片為半透明疊加效果,可見背景白色底圖透出。先繪製不透明底圖,再 drawRGB() 疊加半透明層,即可直觀觀察效果。

關鍵 API 解析

方法用途
Image.getRGB(int[], int, int, int, int, int, int)將指定區域像素讀入整數陣列
Graphics.drawRGB(int[], int, int, int, int, int, int, boolean)直接繪製像素陣列,processAlpha=true 啟用 Alpha 混合
Image.createImage(String)從 JAR 內資源載入 PNG (支援 Alpha 通道)

系列文章導覽

  1. 基礎與半透明 (本文)
  2. 漸變透明動畫 — 背景執行緒驅動 Alpha 遞增
  3. 灰階轉換 — RGB 平均/加權法轉灰階
  4. 動態變色 — 通道置換產生多種配色

掌握 ARGB 位元操作,即可在 J2ME 受限環境實現豐富視覺特效,大幅減少圖片資源體積。

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