2017-02-23 9 views
0

인사말 !!! 너희들 잘하고있어 희망!ImageLoader에서 URL을로드 한 후 원본 비트 맵 크기를 얻는 방법 | Android

저는 Universal Image Loader으로 작업 중이며 URL에서 원래의 비트 맵을 가져와야합니다.

imageLoaderNew.loadImage(bean.getPostMedia().get(i).getUrl(), optionsPostImg, 
     new SimpleImageLoadingListener() { 
     @Override 
     public void onLoadingComplete(String imageUri, 
             View view, 
            Bitmap loadedImage) { 
    // Do whatever you want with Bitmap 
                 } 
             }); 

높이와 loadedImage의 폭이 원래 비트 맵의 ​​높이 및 폭과 동일하지 입니다 -

여기 내 코드입니다.

내 원본 이미지 너비는 2208,1108이지만 이미지 로더는 원본 비트 맵을 제공하지 않습니다.

optionsPostImg = new DisplayImageOptions.Builder() 
        .showImageOnLoading(R.drawable.post_img_default) // 
        .showImageForEmptyUri(R.drawable.post_img_default) 
        .showImageOnFail(R.drawable.post_img_default) 

        .cacheInMemory(true) 
        .cacheOnDisk(true) 
        .considerExifParams(true) 
        .imageScaleType(ImageScaleType.EXACTLY) 

        .build(); 

원래 비트 맵을 얻는 방법을 알려주세요 - 여기

는 이미지 로더의 구성이다.

+0

그냥 파일을 다운로드를 사용할 수 있습니다. 원래 비트 맵이 없습니다. 원본 파일 만. – greenapps

+0

하지만 파일을 다운로드하면 메모리가 많이 소모됩니다. –

+0

아무 것도 없습니다. 아마 루프에있는 버퍼의 8192 바이트. 그게 다야. – greenapps

답변

0

원본 이미지가 너무 커서 메모리 문제가 발생할 수 있지만 원본 이미지를 다운로드하면 안됩니다. 어쨌든 이것은 주어진 URL에서 원본 파일을 다운로드 할 수 있습니다.

public Bitmap getBitmapFromURL(String src) { 
    try { 
     java.net.URL url = new java.net.URL(src); 
     HttpURLConnection connection = (HttpURLConnection) url 
       .openConnection(); 
     connection.setDoInput(true); 
     connection.connect(); 
     InputStream input = connection.getInputStream(); 
     Bitmap myBitmap = BitmapFactory.decodeStream(input); 
     return myBitmap; 
    } catch (IOException e) { 
     e.printStackTrace(); 
     return null; 
    } 
} 

그리고 당신은 메모리 문제를 얻는 경우에 당신은

public Bitmap getResizedBitmap(Bitmap bm, int newHeight, int newWidth) { 
    int width = bm.getWidth(); 
    int height = bm.getHeight(); 
    float scaleWidth = ((float) newWidth)/width; 
    float scaleHeight = ((float) newHeight)/height; 
    // CREATE A MATRIX FOR THE MANIPULATION 
    Matrix matrix = new Matrix(); 
    // RESIZE THE BIT MAP 
    matrix.postScale(scaleWidth, scaleHeight); 

    // "RECREATE" THE NEW BITMAP 
    Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, 
      matrix, false); 

    return resizedBitmap; 
} 
+0

아니요 두 코드 모두 잘못되었습니다. 파일을 다운로드하려면 중간 비트 맵을 사용하지 않습니다. 파일을 변경하면 메모리 문제가 발생할 수 있기 때문입니다. – greenapps