0

カスタム要素 (J2ME ネイティブ グラフィックスを使用) を LWUIT 要素に描画するための最良の方法は何でしょうか?

カスタム要素はマッピング ライブラリからの実装であり、そのコンテンツ (Google マップなど) を Graphics オブジェクトに描画します。結果を LWUIT 要素に直接描画するにはどうすればよいでしょうか (現時点ではコンポーネントに描画しようとしています)。

LWUIT パッケージでラッパーを作成する唯一の方法は、その内部実装を公開することですか?

編集:

ジョン:あなたのソリューションは多くのエンジニアリングのように見えます :P 私が最終的に使用したのは次のラッパーです:

package com.sun.lwuit;

public class ImageWrapper {
  private final Image image;

  public ImageWrapper(final Image lwuitBuffer) {
    this.image = lwuitBuffer;
  }

  public javax.microedition.lcdui.Graphics getGraphics() {
    return image.getGraphics().getGraphics();
  }
}

これで、LWUIT から「ネイティブ」グラフィック要素を取得できます。それにペイント - LWUIT イメージに効果的にペイントします。そして、その画像を使用してコンポーネントにペイントできます。

そして、それはまだハックのように見えます:)

しかし、実際の問題は、難読化した後でも 50kB のコード オーバーヘッドです。しかし、これは別の投稿の問題です:)

/JaanusSiim

4

2 に答える 2

2

ハッキングは必要ないと思います。LWTUI コンポーネント クラスをサブクラス化して、コンポーネントのグラフィック コンテキストに好きなようにペイントできます。ネイティブの lcdui.Graphics オブジェクトを取得するのではなく、使いやすい同じインターフェイスを持つオブジェクトを取得します。

lcdui.Graphics を基礎となるライブラリに渡してその出力を表示する必要がある場合は、次のことをお勧めします。

コンポーネント コードのどこか (コンポーネントの内容を本当に変更する必要がある場合にのみ実行してください):

private Image buffer = null; // keep this

int[] bufferArray = new int[desiredWidth * desiredHeight];
javax.microedition.lcdui.Image bufferImage = 
    Image.createEmptyImage(desiredWidth, desiredHeight);
thirPartyComponent.paint(bufferImage.getGraphics());
bufferImage.getRGB(bufferArray,0,1,0,0,desiredWidth, desiredHeight);
bufferImage = null; //no longer needed
buffer = Image.createImage(bufferArray, desiredWidth, desiredHeight);

コンポーネントの paint(g) メソッドで:

g.drawImage(0,0, buffer);

あなたが行ったハックを行うことで、移植性が失われ、実装プライベートオブジェクトを公開しているため、他のものも壊れる可能性があります。

お役に立てれば。

于 2008-09-17T18:45:20.260 に答える
0

LWUITとJ2MEのjavadocに基づいており、カスタムJ2MEクラスがCanvasであると推測すると、次のようになります。

  • カスタムJ2MEコンポーネントをラップするサブクラスLWUITのComponentクラス
  • LWUITコンポーネントのpaint()メソッドをオーバーライドします
  • LWUITGraphicsクラスをラップするJ2MEGraphicsクラスをサブクラス化し、すべてのメソッド呼び出しを通過させます
  • ラップされたJ2MEグラフィックス実装をカスタムJ2MEコンポーネントのpaintメソッドに渡します

その3番目のステップは醜いものです。LWUITメーリングリストをチェックして、これまでにドームを持っている人がいないかどうかを確認してください。公開されているAPIから、それを行う別の方法はわかりません。

編集:質問に追加されたハックは、画像のハックよりもよく見えます。一般的なケースでは、私が持っているものの方が良いかもしれませんが、LWUITとJ2MEのどちらも、実際にそれを言うのに十分なほどよくわかりません。

于 2008-09-08T00:52:37.933 に答える