簡體   English   中英

從壁畫中獲取bitmapdrawable

[英]Getting bitmapdrawable from fresco

我正在嘗試從SimpleDraweeView獲取位圖。

我已經用uri圖像設置了我的SimpleDraweeView:

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轉換為位圖圖像是這樣的: 空圖像

我正在嘗試獲取SimpleDraweeView正在顯示的位圖

我認為它可以幫到你。

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

也許這不是很好的解決方案,但對我來說效果很好。

獲取位圖可繪制並不是一個好主意,因為Fresco的底層實現將來可能會發生變化,這會破壞您的代碼。

我猜你真的只想要原始的編碼圖像字節(這樣你就不必重新編碼圖像了)。 您可以使用獲取編碼的圖像字節

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();
}

不要忘記關閉引用,以免泄漏內存。 您可以在此處找到更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM