1

さまざまな画像フィルター(グレースケール、セピアなど)のプレビューを含むリストを実装しています

画像処理をUIスレッドから移動したいのですが、安全かどうかわかりません。たとえば、UIスレッドが再描画しようとするとどうなるかを尋ねAndroidBitmap_lockPixelsているときBitmapはどうなりますか?ImageViewImageVIew

public void someMethod(){
    ImageView mImageView = /*initialization*/
    final Bitmap bmp = ((BitmapDrawable) mImageView.getDrawable()).getBitmap();
    new Thread(new Runnable(){
        @Override
        public void run(){
            applyFilter(bmp);
        }
    }).start();
}

public native void applyFilter(Bitmap bmp);
4

2 に答える 2

1

その場合、ビットマップがそのImageView内の何かを直接参照している可能性があります。それ以外の場合、ビットマップは1と0の別のセットになります。完了したら、ビットマップのコピーを作成し、ImageViewを新しいイメージで更新できる場合があります。Honeycomb(3.0)より前のデバイスの画像は、ビットマップを奇妙に処理するため注意してください。また、C++プログラムの場合とほぼ同じように画像を管理する必要があります。

すべきではありませんが、Androidには隠されたものがあることがあるので、気を付けてください。

更新:コピーせずに画像を変更する方法があるかもしれませんが、私はこれをAndroid固有ではなく、一般的なグラフィックに基づいています

于 2012-08-31T14:28:06.647 に答える
1

このケースはまだ試していません。Bitmapただし、現在の使用中を変更しようとしていますImageView。が呼び出されると、をしようとしているときにAndroidBitmap_lockPixelsクラッシュするなど、何らかの異常が発生すると思います。イメージのコピーを作成し、それを処理してから、新しいイメージを に適用できます。それは完全に安全です。ImageViewinvalidateAccess ViolationBitmapImageView

于 2012-08-31T12:58:15.683 に答える