2016-12-31 4 views
4

이미지 뷰에서 비트 맵을 얻는 방법 : 나는 시도나는 그런처럼 <code>Glide</code>에 넣은 <code>ImageView</code>에서 <code>Bitmap</code>를 얻을하고자하는

Glide.with(getContext()).load(URL) 
      .thumbnail(0.5f) 
      .crossFade() 
      .diskCacheStrategy(DiskCacheStrategy.ALL) 
      .into(my_imageView); 

다음

imageView.buildDrawingCache(); 
Bitmap bmap = imageView.getDrawingCache(); 

BitmapDrawable drawable = (BitmapDrawable) imageView.getDrawable(); 
Bitmap bitmap = drawable.getBitmap(); 

그리고 그들 중 누구도 지금까지 저에게 일하지 않았습니다.

어떻게 달성 할 수 있습니까?

+0

나는 글라이드를 모르겠지만, 최선의 대답은 글라이드에서 비트 맵을 얻을 수있을 것이다. 그것이 가능하지 않다면, 적절한 크기의 Bitmap을 만들고, 그것을 Canvas에 감싸고,'ImageView'를'Canvas'에'draw()'하도록 요청하십시오. 'Bitmap'은 결과를 포함 할 것입니다. – CommonsWare

답변

4

아, 이것은 간단한 오류입니다.

DrawingCache를 사용하여 이미지 뷰 밖으로 Bitmap을 얻기 위하여
imageView.setDrawingCacheEnabled(true); 

, 먼저 필요 이미지 캐시를 그리는 이미지 뷰 enable에 : 당신은 당신이 이미지 뷰에서 비트 맵을 얻으려고 노력하는 코드 전에이를 추가해야 . 다음

: 또한

Bitmap bmap = imageView.getDrawingCache(); 

, buildDrawingCache();를 호출 내가 비트 맵은 여전히 ​​항상 (심지어 도면 캐시, 아마 인종과를 사용하지만 널 초래하는 문제가 있었다

+0

이것은 도움이되었지만,'ImageView'에서 새로운 그림을로드하고 표시 할 때, 저장된 첫 번째 비트 맵을 표시합니다. 캐시에 의한 것입니까? –

+1

imageView.destroyDrawingCache()를 사용 해보는 것이 어떨까요? 다른 이미지를 설정하십시오. –

+0

듣기 좋습니다. :) –

0

buildDrawingCache(false);를 호출하는 것과 같습니다 Facebook ShareButton/ShareContent) 그래서 나는 이미지를로드하는 글라이드가 완료되었는지 확인하기 위해 다음과 같은 해결책을 가졌습니다.

Glide.with(this) 
     .load(url) 
     .listener(listener) 
     .into(imageView); 

리스너는

private RequestListener listener = new RequestListener() { 
    ... 

    @Override 
    public boolean onResourceReady(Object resource, Object model, Target target, DataSource dataSource, boolean isFirstResource) { 

     Bitmap bitmap = ((BitmapDrawable) resource).getBitmap(); 
     return false; 
    } 
}; 
+1

글라이드'.asBitmap()'을 사용하면 리스너 내부에 캐스팅을 쉽게 피할 수 있습니다. –

관련 문제