2010-11-20 10 views
2

要するに、ビットマップイメージのすべてのピクセルにアクセスできません。AndroidでBitmapイメージのピクセルにアクセスする方法は?

私はネイティブのカメラアプリを起動する意図を使用して、アプリケーションアクティビティにビットマップイメージを返しました。データは間違いなくビットマップオブジェクトであり、getPixel()を使用して表示、高さ/幅の取得、および一部のピクセルへのアクセスが可能です。しかし、私がgetHeight()とgetWidth()の値を使うと、配列外のエラーが出ます。トレイルとエラーによって、私は画像のピクセル数を減らすことができます。たとえば、420,380の高さと幅の値を返した1つの画像で、200,100にアクセスすることもできます。私はいくつかの画像処理を行い、元の画像にsetPixel()を使用しました。私が画像を表示すると、ピクセルを処理しているピクセルと残りのピクセルが200,100で表示されるので、ピクセルは明らかにアンドロイドで表示されますが、私には表示されません。私はイメージでこの問題を抱えている他の人々と話をしなければなりません。

誰でもこれについてもっと知っていますか?または回避策?

事前に感謝します。

これを回避する方法はないと思いますが、誰かがNDKを使用してメモリ内の画像に直接アクセスする方がよいと思いますか?

答えて

1

AndroidフォーラムでAlbert Puccianiの回答を得ました。 int bufferを作成してピクセルをコピーしてから、get()put()を使用してピクセルを抽出します。 Bitmapクラスのget/setPixel()の代わりにget()put()を使用する方がずっと簡単です。すべての画像のすべてのピクセルをバッファに返すかどうかを今すぐテストする必要があります。

さらにテストを重ねた結果、各プロセスに割り当てられた量にすべてのビットマップが含まれているため、これは単なるメモリの問題であることがわかりました。

1

他のすべての画像と同様に0でインデックス付けされているため、画像内の(getWidth()、getHeight())でピクセルにアクセスすることはできません。有効なピクセルの範囲は、getWidth() - 1、getHeight() - 1までの0です。したがって、最も右端のピクセルは、b.getPixel(b.getWidth() - 1、b.getHeight() 1)。

+0

回答ありがとうございました。ええ、私は0インデックスを認識しています。問題は、ピクセルの半分以上で十分にアクセスできないことです。基本的に私はいくつかのループ(int y = 0; y

関連する問題