2016-11-13 11 views
2

URL의 대형 고해상도 (3225x4800) 이미지를 신문 회사에 전달하려고합니다. 로드하고 싶은 이미지는 High Res Image입니다.Android : 글라이드가 URL의 큰 이미지를 표시하지 않습니다.

String url = "http://www.businessweekmindanao.com/content/wp-content/uploads/2015/10/fitness-and-wellness-poster-final.jpg"; 

Glide.with(getActivity()).load(url).asBitmap().into(new SimpleTarget<Bitmap>() { 
    @Override 
    public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) { 
     imageView.setImageBitmap(resource); 
    } 
}); 

은 여기에서 제공하는 솔루션에서 마이크 오티즈 'TouchImageView을 사용하고 있습니다 : 홈페이지에서 https://github.com/MikeOrtiz/TouchImageView/issues/135로드 자원을. 그러나 작은 해상도의 이미지에서만 작동하는 것으로 보이며 고품질의 이미지를로드하지 않습니다.

내가 시도한 대체 솔루션은 stackoverflow : Android: not displayed ImageView with UIL and TouchImageView 마이크 라이브러리의 onMeasure() 메서드를 수정하려고합니다. 작동 범위 :

Glide.with(getActivity()).load(url) 
       .into(imageViewPreview); 

매우 낮은 해상도로 이미지를로드하는 것이 문제입니다.

예를 들어 Glide 및 TouchImageView를 사용하여 7480x3740과 같은 고해상도 이미지를로드 할 수있는 방법이 있습니까? 어떻게해야합니까?

+0

메모리에있는 바이트 수를 계산하십시오. 7480x3740x4 – greenapps

+0

URL을 게시하여 링크를 클릭하면 그림을 볼 수 있습니다. – greenapps

+0

@greenapps 의견을 보내 주셔서 감사합니다. 링크는 문자열 변수에 있습니다 : http://www.businessweekmindanao.com/content/wp-content/uploads/2015/10/fitness-and-wellness-poster-final.jpg – OBL

답변

3

내 요구 사항에 맞는 해결책을 찾았습니다. override() 메서드는 트릭을 수행합니다. 대상 해상도가 높은 숫자를 설정하는 것이 최종 해결 방법 인 것처럼 보이지만 숫자가 클수록 이미지를 표시하는 데 걸리는 시간이 길어 지므로 프리 로더/진행률 막대를 구현하는 것이 좋습니다. RelativeLayout의 XML을에

Glide.with(getContext()) 
    .asBitMap() //[for new glide versions] 
    .load(url) 
    //.asBitmap()[for older glide versions] 
    //.placeholder(R.drawable.default_placeholder) 
    .override(1600, 1600) // Can be 2000, 2000 
    .into(new BitmapImageViewTarget(imageViewPreview) { 
     @Override 
     public void onResourceReady(Bitmap drawable, GlideAnimation anim) { 
      super.onResourceReady(drawable, anim); 
      progressBar.setVisibility(View.GONE); 
     } 
    }); 

사용자 중심의 프리 로더/진행 막대 자리 표시 :

<ProgressBar 
    android:id="@+id/progressBar" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerInParent="true" /> 

또 다른 문제는 오류 및 프리 로더/진행에 대한 자리 표시되지 않습니다 글라이드에서 로딩 이미지 asBitmap()에 대해 관련이 있기 때문 깔끔 표시 : 내 연구에서

Glide.with(getActivity()) 
    .load(url).asBitmap() 
    .placeholder() //<== will simply not work: 
    .error() // <== is also useless 
    .into(new SimpleTarget<Bitmap>() { 
@Override 
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) { 
     imageView.setImageBitmap(resource); 
    } 
}); 

, 또한 높은 품질의 이미지를 처리하기 위해 피카소 솔루션을 시도 :

Picasso.with(getContext()) 
       .load(url) 
       .resize(1500, 0) 
       .placeholder(R.drawable.default_placeholder) 
       .error(R.drawable.download_error) 
       .into(imageViewPreview); 

결국 Glide 버전에 만족했습니다.

같은 도전에 직면 한 모든 사람들에게 도움이되기를 바랍니다.