2011-01-26 10 views
1

私は最近、NDKコードが割り当てることができるメモリの量にかなり制限されたメモリ(ほとんどのデバイスで〜25Mb)とは異なり、割り当て可能なメモリの量に厳しい制限がないことを発見しましたJava側でビットマップ/キャンバスの使用とNDK

私はビットマップデータが〜20Mbのメモリを取るところで、いくつかの大きなビットマップを一度にメモリに保存する必要がある画像処理アプリケーション(Photoshopのようなもの)を書きたいと思っています。 Javaでこれを行うと、私が試した多くのデバイスでメモリの例外が発生しやすくなります。

私の現在のコードはすべて、画像操作を行うためのBitmapとCanvasクラスを使用しています。 誰でも私のメモリのほとんどをC側に割り当てて、まだビットマップ+キャンバスを使用して(Android 2.1以上を使用して)描画操作を実行できるようにする方法を提案できますか?

例として、私のイメージが6つのビットマップレイヤーで構成され、ユーザーが3番目のレイヤーにペイントしている場合は、3番目のレイヤーにペイントブロブビットマップを描画し、リアルタイムでお互いの上にすべてのレイヤーを平坦化します。私はint配列としてCで6つのビットマップを割り当て、Bitmapオブジェクトに格納されている編集中のレイヤーのコピーを使ってCanvasでJava側でペイント操作を行うという行に沿って何かを考えました。私は平らなステージがどのように動作するのかは分かりません。

+0

私は試みたことがありませんが、ndkでビットマップ操作を示すコードサンプルがsdkにありますが、これはandorid 2.2 –

答えて

3

NDKの "bitmap-plasma"サンプルをチェックしてください。 Javaでビットマップを作成し、そのビットをネイティブコードで操作します。可能な技術の1つは、大きなブロックのメモリを割り当ててイメージをネイティブコードで保持し、単にJavaで作成したビットマップに「ビュー」をレンダリングできることです。ビューをレンダリングし、イメージレイヤの「平坦化」を行う方法は、おそらくネイティブコードで行う必要があります。線に沿って何か:

...ユーザは、層...

My_native_render_code(MyDisplayBitmap)に変更しました。

invalidate();

関連する問題