1

要点では、これは私がやりたいことです:

5 メガ ピクセルのイメージの 100x100 領域 (任意の部分) を Android ビットマップ クラスにロードして、キャンバス要素に描画できるようにしたいと考えています 。やりたいことはそれだけです。それでおしまい。これ以上何もない。それ以下ではありません。シンプルに聞こえます。ですから、にやにや笑う前に、さらに下を読んでください。

この質問はすでに百万回聞かれていることを理解しています。また、宿題をして研究しました。残念ながら、私はあらゆる面で行き詰まりを迎えました。多分私は私の質問を十分に明確にする必要があります。

Android VM で割り当てることができるヒープの量には制限があります。そのため、次の関数を使用しても、独自のカメラ (私は Nexus S を所有しています) からのビットマップであっても、大きなビットマップを読み込むことはできません。

BitmapFactory.decodeStream(InputStream is)

はい、 BitmapFactory.Optionsを使用して拡大縮小できますが、どうすれば拡大できますか?

現在、画像をスムーズにズームイン/ズームアウトできる画像ビューアを設計しようとしています。画像を読み込めない場合、明らかにそれは不可能です。

ジンジャーブレッドには新しいクラスBitmapRegionDecoderがありますが、私は Froyo 用にアプリを設計しています。これらすべてのクラスには、 Skia 2D Graphics Libraryを使用するネイティブ API へのフックがあります。Android NDK は、これらの API へのアクセスも許可しません。Skia を手動でビルドし、それを使用して Java ビットマップをロードする方法があるかもしれません。しかし、私はどのようにわからないのですか?

このアプリではすでに解決されているようです ( http://blog.javia.org/how-to-work-around-androids-24-mb-memory-limit/ ) - https://market.android.com /details?id=image.viewerは、 malloc/newを使用してネイティブ C コードで割り当てられたメモリを使用します。しかし、私はどのように理解できませんか?

したがって、私が望むのは、画像をフル解像度にズームイン/ズームアウトできるものです。可能であれば、スムーズにするか、少なくとも別のスレッドで実行できます。

OpenGL を使用する必要がある場合は、サンプル コードも教えてください。

4

1 に答える 1

0

私は自分でこれを理解しました。:)

それは最善の方法ではありませんが、素晴らしく機能します。

ネイティブ コードでビットマップを作成し、Skia グラフィック ライブラリを使用してその領域のサブセットにアクセスしました。(これは、私がプライベート API にアクセスしていることを意味し、その機能は新しい Android バージョンでは簡単に壊れる可能性があります)。

http://code.google.com/p/skia/

C++ コードでこのライブラリにリンクし、JNI を介してこの機能にアクセスする必要がありました。

于 2011-05-25T11:57:40.777 に答える