2013-02-18 3 views
0

Скачано изображение для использования после this excellent article. Мое собственное изображение, которое я использую, - это статическое изображение карты google, которое составляет 300x400. Я возился с несколькими настройками и расширил его, чтобы заполнить экран, но он просто выглядит очень размытым.Скачано изображение Появляется очень размыто

<ImageView 
    android:id="@+id/image" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_x="0dp" 
    android:layout_y="0dp" 
    android:adjustViewBounds="true" 
    android:clickable="false" 
    android:gravity="center_vertical" 
    android:longClickable="false" 
    android:scaleType="fitCenter" /> 

Это то, что у меня есть на экране xml layout. Это общая проблема? Я сделал хороший поиск и не нашел ответа. 300x400 не подходит для андроида?

+2

Имейте в виду, что большинство экранов телефонов составляют не менее 480x800 пикселей (и 720x1280 становится довольно распространенным). Даже принимая во внимание плотность пикселей, ваше изображение, вероятно, увеличивается. – Karakuri

+0

Я попробовал его с действительно высоким разрешением изображения, и это тоже искажено. –

ответ

1

Я нашел причину, по которой они были низки, класс загрузчика изображений имел встроенное сжатие:

//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=70; 
     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; 
} 

Так просто удалить эту часть, чтобы вы остались с:

//decodes image and scales it to reduce memory consumption 
private Bitmap decodeFile(File f){ 

    try { 
    return BitmapFactory.decodeStream(new FileInputStream(f)); 
} catch (FileNotFoundException e) { 
    e.printStackTrace(); 
} 
return null; 

} 

кристально чистое изображение.

+0

, что дает следующую ошибку при использовании нескольких изображений ........ 4147200-байтовое внешнее размещение слишком велико для этого обработать. –

+1

Очень плохой ответ. Вы удалили понижающую дискретизацию и, как @ The Ray of Hope, сказали, что теперь вы рискуете проблемами OOM. – Brandon

1

300x400 не подходит для андроида?

Это зависит от ориентации исходного изображения и нескольких других вещей, таких как макет и дисплей устройства. В качестве альтернативы, вы можете попробовать следующий код, чтобы загрузить изображение, это отлично работает для меня:

не забудьте добавить

<uses-permission android:name="android.permission.INTERNET"></uses-permission> 

вашему Manifest

public class MainActivity extends Activity { 

private Button get; 
private ImageView pic; 
private static final String SRC = "http://www.allindiaflorist.com/imgs/arrangemen4.jpg"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    get = (Button)findViewById(R.id.button1); 
    pic = (ImageView)findViewById(R.id.imageView1); 

    get.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      pic.setImageBitmap(getBitmapFromURL(SRC)); 

     } 
    }); 

} 

public static Bitmap getBitmapFromURL(String src) { 
     try { 
      URL url = new 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(); 
      Log.e("getBmpFromUrl error: ", e.getMessage().toString()); 
      return null; 
     } 
    } 

    } 

enter image description here

+0

Я пробовал это и получил силу. У вас есть код, который вы используете для установки изображения. Я использую: Bitmap bitmap = getBitmapFromURL ("http://www.allindiaflorist.com/imgs/arrangemen4.jpg"); img = (ImageView) findViewById (R.id.image); img.setImageBitmap (bitmap); –

+0

Я обновил свой ответ. Обратите внимание, что установка OnClickListener обычно выполняется в методе onResume(), приведенный выше код является всего лишь базовым примером – Droidman

Смежные вопросы