2013-02-22 102 views
5

在Android中,当我们从图库中打开屏幕截图时。它会模糊2秒,然后自动调整。图像不自动调整

但是,当我使用这个屏幕显示图像为使用图像路径上的ImageView的设置:,

图像路径是:/mnt/sdcard/ScreenCapture/SC20130219-124221.png

private void showImage(String imgPath) { 
     // TODO Auto-generated method stub 

     System.out.println("Image Path is: "+imgPath); 

     ImageView openImage=(ImageView)findViewById(R.id.img_fullScreen); 
     ExifInterface exifMedia = null; 
     try { 
      exifMedia = new ExifInterface(imgPath); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     String exifOrint = exifMedia.getAttribute(ExifInterface.TAG_ORIENTATION); 
     int exifOrientation = Integer.parseInt(exifOrint); 
     System.out.println("Orientation Tag is:"+exifOrientation); 
     BitmapFactory.Options mOptions=new BitmapFactory.Options(); 
     mOptions.inSampleSize=2; 
     Bitmap imgBitmap = BitmapFactory.decodeFile(imgPath,mOptions); 
     //Runtime.getRuntime().gc(); 

     imgBitmap = getResizedBitmapImage(imgBitmap, 200, 200, exifOrientation); 
     openImage.setImageBitmap(imgBitmap); 
    } 

另一种情况:从URL中获取位图:

URL url = new URL(urlTarget); 
      BitmapFactory.Options mOptions = new BitmapFactory.Options(); 
      mOptions.inSampleSize=1; 
      Bitmap bmp = BitmapFactory.decodeStream(url 
        .openConnection().getInputStream(),null,mOptions); 

然后图像不会自动调整自身。它来了BLURRED。这是我的问题。这是只在屏幕上的情况下。

感谢

+0

你能粘贴getResizedBitmapImage()方法? – 2013-02-25 08:05:29

+0

这是一个截图,所以使用'mOptions.inSampleSize = 1;'。否则,它肯定会变得模糊 – 2013-02-25 08:28:03

+0

你好@SherifelKhatib它帮助我在上面的情况下,但从URL获取位图的情况下,它不起作用。你能否告诉我如何从URL中获取位图的情况下如何使用inSampleSize。我编辑了我的代码。请看看 – 2013-02-25 09:08:35

回答

0

这是Android图库应用的只是一个棘手的行为(也就是一个很好的例子,说明如何做出更好的用户体验,如果你要装载大图像)。
首先,当您点击图库中的图像缩略图时,它将使用该缩略图来显示在ImageView中。由于缩略图很小,需要按比例缩放以修复ImageView,因此您会看到它模糊不清。
将缩略图显示给用户时,还会对原始图像进行解码。完成所有工作后,将显示原始图像而不是缩略图。
画廊也使用的动画缩略图和原始图像之间切换时(默认布局动画可以发现它在API演示)

1

mOptions.inSampleSize=2;这将跳过交替像素数据和加载图像1/2原尺寸。 当然它会看起来模糊和高度混叠,因为这不是靠近好的image scaling算法。

就图库应用程序而言,它会逐步加载,它显示缩略图或快速渲染,而全分辨率图像正在加载到内存中。

0

mOptions.inSampleSize = 2代码更改为mOptions.inSampleSize =1 和你的问题一定会得到解决

+0

绝对正确 – 2013-03-04 06:12:18

+0

@BorntoWin Ohhhh它的伟大.... – 2013-03-04 06:18:58