2013-09-21 5 views
0

У меня есть список растровых изображений в папке с ресурсами для отображения (с помощью ViewPager). Я попытался установить ширину и высоту изображения на основе размера экрана (с использованием параметров макета). Но качество изображения нарушается. Как улучшить качество изображения?Качество изображения в ImageView

Drawable drw = Drawable.createFromStream(getAssets(). 
          open("Parts/"+drawables[i]),null); 

Здесь drawables[i] является String[] (скажем, как ball.bmp и "Часть" является вложенным актив). Теперь я установить изображение в ImageView как,

imageView.setBackgroundDrawable(imageArray[position]); 

Изображение выглядит хорошо в мобильном телефоне, но выглядит растянуто во вкладке.

+0

это один может помочь :: Http:? //stackoverflow.com/questions/15809859/horrible-imageview-bitmap-quality RQ = 1 – ASP

+0

вы должны преобразовать ваш растровый объект с новой шириной и высотой – Piyush

ответ

0

Попробуйте это; декодировать изображение и найти правильное значение шкалы:

private Bitmap getBitmap(String url) { 
    // from web 
    try { 
     Bitmap bitmap = null; 
     URL imageUrl = new URL(url); 

     HttpURLConnection conn = (HttpURLConnection) imageUrl 
       .openConnection(); 
     conn.setConnectTimeout(1000); 
     conn.setReadTimeout(1000); 
     conn.setInstanceFollowRedirects(true); 
     InputStream is = conn.getInputStream(); 
     OutputStream os = new FileOutputStream(f); 
     Utils.CopyStream(is, os); 
     os.close(); 
     bitmap = decodeFile(f); 
     return bitmap; 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
     return null; 
    } 
} 

// decodes image and scales it to reduce memory consumption 
private Bitmap decodeFile(File f) { 
    try { 
     // decode image size 
     BitmapFactory.Options o = new BitmapFactory.Options(); 
     o.inJustDecodeBounds = true; 
     BitmapFactory.decodeStream(new FileInputStream(f), null, o); 

     // Find the correct scale value. It should be the power of 2. 
     final int REQUIRED_SIZE = 150; 
     int width_tmp = o.outWidth, height_tmp = o.outHeight; 
     int scale = 1; 
     while (true) { 
      if (width_tmp/2 < REQUIRED_SIZE 
        || height_tmp/2 < REQUIRED_SIZE) 
       break; 
      width_tmp /= 2; 
      height_tmp /= 2; 
      scale *= 2; 
     } 

     // decode with inSampleSize 
     BitmapFactory.Options o2 = new BitmapFactory.Options(); 
     o2.inSampleSize = scale; 
     return BitmapFactory.decodeStream(new FileInputStream(f), null, o2); 
    } catch (FileNotFoundException e) { 
    } 
    return null; 
} 
Смежные вопросы