2016-08-03 5 views
2

私はSimpleDraweeViewからビットマップを取得しようとしています。フレスコ画からbitmapdrawableを取得する

私はすでに、URIの画像と私のSimpleDraweeViewをsetted:

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

なぜこれを正確に行いますか?フレスコは既にあなたのためにすべてのキャッシングなどを管理しています。 –

+0

@AlexanderOprisnik私が考えることができるよい理由は、UIテストのためにビットマップ描画可能なものにアクセスすることは有益ですが、そうするためには、通常の描画可能なものから始めて、それをキャストする方法はわかりません –

+0

私はユーザーにいくつかの画像を見せてから、それをストレージに保存したいから –

答えて

0

によって表示されているビットマップを取得しようとしていますあなたのコードを壊すでしょう。

私はあなたが実際にはエンコードされていないイメージバイトを(イメージを再エンコードする必要がないように)ほしいと思うでしょう。あなたは、符号化された画像は、すでに前の画像をフェッチしているので、それはすぐに利用可能であるべきと

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

を閉じることを忘れてはいけないようにあなたが何かを行うことができます

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

でバイトを取得することができます あなたがメモリを漏らさないように参照してください。 詳細はhereです。

0

私はそれがあなたを助けることができると思います。

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

多分それは美しい解決策ではありませんが、私にとってはうまくいきます。

関連する問題