0

バックグラウンド

私はrenderscriptを初めて使用し、それを使っていくつかの実験を試してみたいと思います(ただし、SDKで見つけた複雑なものではなく、小さなものです)。私の(NDKを使用)。

私がしたいこと

要するに、ビットマップ データを renderscript に渡したいと思います。次に、データを前のものとは反対の寸法を持つ別のビットマップにコピーして、2 番目のビットマップが最初のビットマップの回転になるようにします。 .

説明用: このビットマップから (幅:2 、高さ:4):

01
23 
45
67

私はそれを(反時計回りに90度)回転させたい:

1357
0246

問題

ルート関数の署名を変更しようとすると、Eclipse でエラーが発生することに気付きました。

新しい関数を作成しても、新しいエラーが発生します。Google のブログ(ここ) に書かれているのと同じコードを試してみましたが、彼が使用した関数をどのように作成したのかがわかりませんでした。また、フィルター関数を入力と出力を持つように変更できないのはなぜですか?ビットマップ配列。

renderscript に送信するパラメータをカスタマイズし、その中のデータを使用するにはどうすればよいですか?

「フィルター」または「ルート」関数 (API 11 以降) を使用しなくても問題ありませんか? そこでできることをもっと柔軟にするにはどうすればよいですか?

4

1 に答える 1

1

ここで個別に質問されているので、順番にお答えします。1) 正方形ではないビットマップを回転させたい。残念ながら、Renderscript のビットマップ モデルでは、これを簡単に行うことはできません。これは、入力割り当てと出力割り当てが同じ形状 (つまり、型が異なっていても、同じ数の次元とそれらの次元の値) でなければならないためです。必要な効果を得るには、新しい形状の出力割り当てのみを持つルート関数を使用する必要があります (つまり、入力列 X 入力行)。入力ビットマップを保持するための rs_allocation グローバル変数を作成できます (Java 側で作成/バインドできます)。カーネルは出力セルを rsGetElementAt(globalInAlloc, y, x) の結果に設定するだけです。

2) API 11 を使用している場合、root() 関数の署名を調整することはできません (NULL 割り当てを入力として渡し、使用していない場合は Java 側で出力できます)。また、これらの古い API レベルでは、ソース ファイルごとに複数のカーネルを作成することはできないため、「root()」関数を 1 つだけにする必要があります。ソース ファイルごとにより多くのカーネルを使用する場合は、より高い API レベルをターゲットにすることを検討してください。

于 2013-01-21T18:05:49.327 に答える