2016-08-03 45 views
2

我試圖從SimpleDraweeView獲取位圖。從壁畫獲取位圖

我已經設置好的我SimpleDraweeView與URI圖像:

final Uri uri = new Uri.Builder() 
        .scheme(UriUtil.LOCAL_RESOURCE_SCHEME) 
        .path(returnUri.getPath()) 
        .build(); 
      profileImage.setImageURI(returnUri); 

而現在我想將圖像保存在手機的內存(存儲)。

Bitmap b = ((BitmapDrawable) profileImage.getDrawable()).getBitmap(); // ImageDiskHelper.drawableToBitmap(profileImage.getDrawable().get); 
     try { 
      ImageDiskHelper.saveToInternalStorage(b, "MyActualProfileImage"); 
     } catch(Exception c){ } 

但是,如果使用上面的代碼我得到:com.facebook.drawee.generic.RootDrawable不能轉換到android.graphics.drawable.BitmapDrawable

我轉換profileImage.getDrawable爲位圖圖像是這樣的:empty image

我試圖讓正在由該SimpleDraweeView

+0

你爲什麼要這樣做? Fresco已經爲您管理所有的緩存等。 –

+0

@AlexanderOprisnik我能想到的一個很好的理由就是用於UI測試,它可以訪問可繪製的位圖,但要做到這一點,我們需要從一個普通的drawable開始,並且我不知道如何投射那個 –

+0

因爲我想讓用戶看到一些圖像,然後將其保存到存儲中 –

回答

0

顯示獲取位圖繪製不是因爲壁畫的底層實現可以在浮圖改變一個好主意,位圖re,這會破壞你的代碼。

我想你真的只是想要原始編碼的圖像字節(這樣你就不必重新編碼圖像)。 你可以得到的編碼圖像字節與

DataSource<CloseableReference<PooledByteBuffer>> dataSource = imagePipeline.fetchEncodedImage(imageRequest, callerContext);

既然你已經取出之前的圖像,就可以將其瞬間,你可以這樣做

try { 
    CloseableReference<PooledByteBuffer> encodedImage = dataSource.getResult(); 
    if (imageReference != null) { 
    try { 
     // Do something with the encoded image, but do not keep the reference to it! 
     // The image may get recycled as soon as the reference gets closed below. 
    } finally { 
     CloseableReference.closeSafely(encodedImage); 
    } 
    } else { 
    // cache miss 
    ... 
    } 
} finally { 
    dataSource.close(); 
} 

不要忘記關閉這些參考資料可以讓你不會泄漏記憶。 你可以找到更多的信息here

0

我認爲它可以幫助你。

SimpleDraweeView view = findView(R.id.pic); 
view.setDrawingCacheEnabled(true); 
view.buildDrawingCache(); 
Bitmap bitmap = view.getDrawingCache(); 
if (bitmap != null) { 
    dominantColor = getDominantColor(bitmap); 
} 

也許這不是一個漂亮的解決方案,但對我來說工作很好。