7

我正在使用 android 内置摄像头拍照,然后将同一张照片附加到电子邮件中,当我在 1.6 设备中测试此功能时,我可以为内置摄像头拍摄的照片命名,但在 2.1 中,图片是有一个名称,即由设备给出,

如何在 2.1 内置相机图像中赋予用户定义的名称..

为了避免这个问题,我手动保存图像,但是当我尝试通过意图将图像作为位图取回,然后使用压缩方法将其保存到 sd 卡时

此方法处理来自内置相机的结果

protected void onActivityResult(int requestCode, int resultCode, Intent data)
 {
  File file = new File(Environment.getExternalStorageDirectory()
    + "/test.png");
  switch (requestCode)
  {
  case PHOTO_ACTION:
   if (resultCode == RESULT_CANCELED)
   {
     addPhoto = false;
     Toast.makeText(this, "Canceled ", Toast.LENGTH_LONG).show();
     break;
   } else if (resultCode == RESULT_OK)
   {
    Bundle b = data.getExtras();
    Bitmap bm = (Bitmap) b.get("data");

    FileOutputStream out;
    try
     {

     out = new FileOutputStream(file);
     bm.compress(Bitmap.CompressFormat.JPEG, 100, out);
     out.flush();
     out.close();
     scanPhoto(file.toString());
     out = null;
     addPhoto = true;
     } catch (Exception e)
      {
       e.printStackTrace();
       addPhoto = false;
      }

但是当我像这样存储时,我得到了两个图像。一个带有系统给定名称,另一个带有我给定的名称。但是用户定义的图像分辨率较低,所以我的问题是如何在不压缩的情况下以更高的分辨率保存位图..请帮助....我

4

2 回答 2

6

如果您只想保存位图而不损失质量,请尝试使用 CompressFormat.PNG 而不是 JPEG,我以前见过有人遇到这个问题。尝试改变:

bm.compress(Bitmap.CompressFormat.JPEG, 100, out);

和:

bm.compress(Bitmap.CompressFormat.PNG, 100, out);

并看到它有帮助。

于 2011-03-04T11:25:44.453 回答
3

除了上面的 Rick 回答之外,请确保您提供了一个指向相机意图的 URI,它可以保存完整的图像,否则它将在意图的数据参数中返回拇指图像。所以它会像:

Intent photoPickerIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
imgFile = new File("Cache directory","img.png"); //== where you want full size image
photoPickerIntent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(imgFile));
startActivityForResult(photoPickerIntent, PickPhoto);

这是我正在做的错误。

于 2014-08-22T08:39:42.900 回答