2017-01-28 88 views
0

我正在拍摄来自我的原生Android手机相机的照片!但我想要的是调整拍摄的照片,然后保存。Android相机意图捕获照片并在保存前调整照片大小

我一直在努力为:

public void takePhoto() { 
     Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
     File folder = new File(Environment.getExternalStorageDirectory() + "/PhotoBox"); 

     if (!folder.exists()) { 
      folder.mkdir(); 
     } 
     final Calendar c = Calendar.getInstance(); 
     String new_Date = c.get(Calendar.DAY_OF_MONTH) + "-" + ((c.get(Calendar.MONTH)) + 1) + "-" + c.get(Calendar.YEAR) + " " + c.get(Calendar.HOUR) + "-" + c.get(Calendar.MINUTE) + "-" + c.get(Calendar.SECOND); 
     path = String.format(Environment.getExternalStorageDirectory() + "/" + "PhotoBox" + "/%s.png", "Product(" + new_Date + ")"); 

     File photo = new File(path); 

     intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo)); 
     xPath = path; 
     startActivityForResult(intent, 2); 
    } 

我知道我的捕捉图像被保存后的照片。我可以通过创建缩放的位图来调整图像大小!但在Camera Intent的情况下,我得到的只是Uri的拍摄图像,然后我保存了它。

但我想知道

我如何可以调整所拍摄的照片由Android相机意图和 THEN SAVE?

+0

你的意思是调整大小,具体比例是什么?像720 * 720?什么 ? – W4R10CK

+1

不可能。使用这种相机意图总是首先保存图像。改用Camera类。 – greenapps

+0

我只需要调整图像的大小,如200x200 ...任何 –

回答

2

您正在使用EXTRA_OUTPUT。这要求相机应用程序将图像保存到该位置。在你的情况下,你将它指向一个文件,所以相机应用程序将图像保存到该文件。在将控制权交还给您之前,它会这样做,因此您无法在此之前调整图像大小。

你的选择是:

  • 只是调整图像大小之后。

  • 从您的Intent中删除EXTRA_OUTPUT。然后,相机应用程序不应将图像保存到文件,而应通过在onActivityResult()中交给您的Intent中的"data"额外部分为您提供缩略图大小的图像。这个缩略图可能根本不需要调整大小;即使这样做,您可以在将其保存到某个位置之前调整它的大小。

  • 执行ContentProvider,它将从相机应用程序接收图像,然后在保存之前调整它的大小。这是不太可能的,因为你不可能有足够的堆空间来处理全尺寸的图像。

+0

',而不是将图像保存到文件,相机应用程序应该给你一个缩略图大小的图像。它会同时做到这一点。 – greenapps

+0

@greenapps:这完全取决于相机应用程序。一个写得好的相机应用程序将只提供缩略图大小的图像。唉,在成千上万的Android设备模型上预装了数百个相机应用程序,并不是所有的开发人员都看过文档。 – CommonsWare

+0

值得依赖Intent的“数据”而不是“extra_output”?由于AFAIK的内容在图像的分辨率和大小方面有很大的差异?如果我错了,请纠正我。 – Hemang