2015-06-10 118 views
0

我不想使用任何位图调整大小代码,如果我可以帮助它。 我有一个方法来获得一个MINI缩略图URI时,我从画廊的照片,但是当我尝试做用相机一样它不工作:Android获取缩略图Uri从相机获取图片后

这里是方法:

private Uri getParsedUri(Uri selectedImageUri) { 
    Uri parsed = null; 
    try { 
     String uri = getThumbnailPath(selectedImageUri); 

     if (uri != null) { 
      Timber.d("Thumb uri found %s", uri); 
      File file = new File(uri); 
      parsed = Uri.fromFile(file); 
      Timber.d("thumb uri parsed : %s", parsed); 
     } else { 
      Timber.d("Thumb uri not found, using : %s", selectedImageUri); 
     } 
    } catch (Exception e){ 
     Timber.e(e, "Error getting mini uri"); 
    } 
    return parsed; 
} 

private String getThumbnailPath(Uri uri) { 
    String[] projection = { MediaStore.Images.Media._ID }; 
    String result = null; 
    Cursor cursor = getContentResolver().query(uri, projection, null, null, null); 
    if (cursor != null && cursor.getCount() > 0) { 
     int column_index = cursor 
       .getColumnIndexOrThrow(MediaStore.Images.Media._ID); 

     cursor.moveToFirst(); 
     long imageId = cursor.getLong(column_index); 
     cursor.close(); 

     Cursor cursor2 = MediaStore.Images.Thumbnails.queryMiniThumbnail(
       getContentResolver(), imageId, 
       MediaStore.Images.Thumbnails.MINI_KIND, 
       null); 
     if (cursor2 != null && cursor2.getCount() > 0) { 
      cursor2.moveToFirst(); 
      result = cursor2.getString(cursor2.getColumnIndexOrThrow(MediaStore.Images.Thumbnails 
        .DATA)); 
      cursor2.close(); 
     } 
    } 
    return result; //always null for pictures from the Camera 
} 

这里是我提供的相机应用程序的URI额外的:

private void onTakePhotoFromCameraClick() { 
    final Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
//  takePicUri = Uri.fromFile(getTempFile(ProductNewActivity.this)); 
    takePicUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
      new ContentValues()); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, 
      takePicUri); 
    startActivityForResult(intent, OPTION_TAKE_PHOTO_FROM_CAMERA); 
} 


private File getTempFile(Context context) { 
    final File path = new File(Environment.getExternalStorageDirectory(), 
      context.getPackageName()); 
    if (!path.exists()) { 
     path.mkdir(); 
    } 
    long millis = new Date().getTime(); 
    String name_file = String.valueOf(millis); 
    File tempImageFile = new File(path, "MyImage_" + name_file + ".tmp"); 
    return tempImageFile; 
} 

两者越来越开放的(使用内容分解或创建我的自定义URI的方法,不工作,我从来没有能够得到一个有没有一种方法可以指示系统生成缩略图?缩略图是否始终生成?

编辑:我想我没有解释清楚。我需要2个Uri:一个用于放大图像,另一个用于缩略图。我不需要位图。我正在使用Universal Image Loader来显示图像,所以我不需要小的位图。我自己生成大图的Uri,但我想找到一种方法让Android生成缩略图,因为它已经为图库的图片添加了它。

+0

为什么否决:

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, TAKE_THUMB); 

然后在OnActivityResult你可以从喜欢的意图提取大拇指?你能解释一下你为什么拒绝了,这样我就可以纠正错误吗? – vallllll

回答

0

我有这段代码可能对您有所帮助,让我告诉您,此代码将调用相机并以全分辨率拍摄存储在外部目录中的图片,并且您可以随时参阅此路径。

final int TAKE_PHOTO_REQ = 100; 
    String file_path = Environment.getExternalStorageDirectory() 
      + "/recent.jpg"; 
    file = new File(file_path); 
public void takePic(){ 
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
      startActivityForResult(intent, TAKE_PHOTO_REQUEST_FRAG); 
} 
@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     switch (requestCode) { 
     case TAKE_PHOTO_REQ: { 
      if (resultCode == TakePicture.RESULT_OK && data != null) { 

       Bitmap myBmp = (Bitmap) data.getExtras().get("data"); 



       imageView.setImageBitmap(myBmp); 
       ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 

       // you can create a new file name "recent.jpg" in sdcard folder. 
       File f = new File(file_path); 
       try { 
        f.createNewFile(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       // write the bytes in file 
       FileOutputStream fo = null; 
       try { 
        fo = new FileOutputStream(f); 
       } catch (FileNotFoundException e1) { 
        // TODO Auto-generated catch block 
        e1.printStackTrace(); 
       } 
       try { 
        fo.write(bytes.toByteArray()); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 

       // remember close de FileOutput 
       try { 
        fo.close(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       Log.e("take-img", "Image Saved to sd card..."); 

       break; 
      } 
     } 
     } 
    } 

希望这会帮助你。

+0

我不想要位图,我想要一个小图片的Uri。 – vallllll

+0

尝试从路径本身获取uri。@ vallllll – sahulab

+0

是的,但它创建了一个额外的文件和一个我不需要的额外位图。我想知道是否有方法获取Android默认创建的缩略图。 – vallllll

0

如果你有兴趣只在缩略图然后启动意图如下:

Bundle extras = data.getExtras(); 
Bitmap bitmap = (Bitmap) extras.get("data"); 
imageView1.setImageBitmap(bitmap); 
+0

谢谢,但在三星Galaxu S5我得到零余额 – vallllll