1

我正在实现包含不同图像过滤器(灰度、棕褐色等)预览的列表

我想将图像处理移出 UI 线程,但我不确定它是否安全。例如,当我要求AndroidBitmap_lockPixelsUI线程尝试重绘时会发生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

我还没有尝试过这种情况;但是,您正在尝试修改当前正在使用BitmapImageView. 我认为当AndroidBitmap_lockPixels被调用时,会发生一些异常,例如在ImageView尝试时崩溃invalidate或类似于Access Violation. 您可以制作图像的副本,对其进行处理,然后将新的应用BitmapImageView; 这是完全安全的。

于 2012-08-31T12:58:15.683 回答
1

在这种情况下,位图有可能直接引用该 ImageView 中的某些内容。否则,位图将变成另一组 1 和 0。完成后,您也许可以制作 Bitmap 的副本并使用新图像更新 ImageView。在 Honeycomb (3.0) 之前的设备上要小心图像,因为它们处理位图很奇怪,您必须像在 C++ 程序中一样管理它们。

不应该,但 Android 中有时会隐藏一些东西,所以要小心。

更新:可能有一种方法可以在不复制的情况下修改图像,但我更多地基于一般图形而不是特定于 Android

于 2012-08-31T14:28:06.647 回答