0

を使用して作成された BufferedImage があります

new BufferedImage(wid,hgt,BufferedImage.TYPE_INT_ARGB);

他の複数の画像を使用して壁紙を組み立てます。Jave SE では正常に動作しますが、J9 CDC/PP プラットフォームでコードを実行しようとすると、個人プロファイルの BufferedImage にコンストラクターがないことがわかりました。

CDC 1.0 とPersonal Profile 1.1を使用して、アルファチャンネルをサポートする画像を作成する方法を教えてもらえますか?


編集:今のところ、NoSuchMethodError(など)を処理するフォールバックコードを作成し、GraphicsConfiguration.createCompatibleImage(int、int)で画像を作成するだけです。アルファブレンディング画像が作成される可能性がありますが、他の優先事項があるため、それを具体的にテストできるようになるまでには数週間かかります (ハンドヘルドでのテストは私の直接の責任ではないため、私の手に負えません)。

より良い答えが見つかったら、これに対する答えとして投稿します。それまでの間、他の誰かが私を打ち負かした場合、それが機能する場合はあなたの答えを受け入れますのでご安心ください。その答えは近い将来、私にとって興味深いものになります(2〜5年後にはまだ答えが必要になると思います) .

4

1 に答える 1

2

Image クラス (javax.microedition.lcdui.Image ) には getRGB(...) メソッドが含まれています。このメソッドは、Image を解析して、イメージの各ピクセルの RGB+Alpha 値の配列にします。画像をその形式で作成したら、画像を重ねる前にアルファ値を調整して透明度を上げるのは簡単です。これは、J2ME で画像の透明度を編集するために私が実際に見た唯一の動的な方法です。

rgba 配列からアルファ (透明度) 値を取得するには、次のようにビットシフトを使用する必要があります。

int origAlpha = (rgba[j] >> 24);

次に、アルファ (透明度) 値を (そのピクセルの色を変更せずに) 別のものに変更するには、ビットシフトを使用して別の透明度レベルを挿入できます。

int newAlpha = 0x33; // or use whatever 0-255 value you want, with 255=opaque, 0=transparent
rgba[j] = (rgba[j] & 0x00ffffff);
rgba[j] = (rgba[j] | (newAlpha << 24));

次に、画像データのバイト配列をパラメーターとして受け取る createImage(...) メソッドが Image にあり、変更したピクセル データ配列から新しい画像を作成するために使用できます。

また、SonyEricsson の開発者向け Web サイトには、「MIDP 2.0 で画像をフェード インおよびフェード アウトする」というサンプル コードを含むチュートリアルもあり、「画像のアルファ値を変更してブレンドされたように見せる方法」を説明しています。これは本質的にアルファ ブレンディングです。

于 2010-02-13T02:02:04.297 に答える