2012-08-31 43 views
0

我正在實現包含不同圖像過濾器(灰度,棕褐色等)預覽的列表調用從非UI線程鎖定位圖像素的本地函數是否安全?

我想將圖像處理移出UI線程,但我不確定它是否安全。例如,當我打電話AndroidBitmap_lockPixelsBitmapImageView如果UI線程將嘗試重繪ImageVIew會發生什麼?

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); 
+0

你能不能請張貼樣本? –

+0

@xjaphx這裏是 –

回答

1

我還沒有試過這種情況下還沒有;但是,您試圖修改ImageView上當前正在使用的Bitmap。我認爲當AndroidBitmap_lockPixels被調用時,會發生一些異常情況,如ImageView上的崩潰,同時嘗試invalidate或類似Access Violation。 你可以複製圖像,處理它,然後將新的Bitmap應用到ImageView;這是完全安全的。

+0

如果我在UI線程中修改位圖是沒有問題的,因爲在處理完成之前ImageView不會失效。做一個副本 - 這是一個想法,但正如我說我創建預覽圖像。所以會創建很多副本。任何方式避免這個?附:個人感謝您的「烏賊」文章:) –

+0

如果沒有製作副本,那麼總共會處理/顯示多少圖片?也如果複印?你能否提供圖像的大小和質量?如果你一次試圖處理大量的圖像,這將是一個真正的交易。 –

+0

6 png圖片不大於300x300。如果我將製作副本,將會有12張圖片:) –

1

在這種情況下,Bitmap有可能直接引用該ImageView中的某些內容。否則,位圖變成另一組1和0。您可能可以製作位圖副本,並在完成後使用新圖像更新ImageView。在Honeycomb(3.0)之前請注意設備上的圖像,因爲它們處理位圖很奇怪,你必須像在C++程序中一樣管理它們。

它不應該,但有時在Android中隱藏的東西,所以小心。

更新:有可能是來修改圖像,而不復制的方式,但我這個基礎Android的更具體的斷一般的圖形,而不是

相關問題