【问题标题】:Storing image after camera click in my app stores blur image在我的应用程序中单击相机后存储图像存储模糊图像
【发布时间】:2016-11-17 12:18:15
【问题描述】:

我要求用户从我的应用程序中单击图像,然后该图像存储在本地存储中并从那里存储到服务器,但问题是存储的图像模糊。

public void saveImage(Bitmap bitmap, int i)
{
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.JPEG,100, bytes);
    File directory  = new File(Environment.getExternalStorageDirectory()+"my_directory");
    if(!directory.exists())
    {
        directory.mkdirs();
    }
    File f = new File(Environment.getExternalStorageDirectory()+"my_directory");
    try{
        f.createNewFile();
        //write the bytes in file
        FileOutputStream fo = new FileOutputStream(f);
        fo.write(bytes.toByteArray());
        fo.close();
    }catch(IOException ioe){
        ioe.printStackTrace();
    }
} 

这是我用来保存图像的代码,这是生成位图的 OnActivityResult。

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 0)
    {
        if(data!=null)
        {
            Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
            iv_upload.setImageBitmap(thumbnail);

            saveImage(thumbnail,(int)System.currentTimeMillis());
        }
    }

}

【问题讨论】:

  • 您正在保存返回的缩略图而不是全尺寸图像
  • thumbnail 为我提供位图,我将从哪里获得完整尺寸的图像
  • 您必须将 输出文件 uri 传递给图像捕获意图,例如 takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI); 请参阅我的第一条评论中提供的链接。

标签: android android-bitmap android-camera-intent


【解决方案1】:

是否有任何理由像在您的代码中那样压缩图像?

Android 相机应用程序将返回 Intent 中的照片编码为额外的小位图,传递给 onActivityResult(),位于键“数据”下。以下代码检索此图像并将其显示在 ImageView 中。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
        Bundle extras = data.getExtras();
        Bitmap imageBitmap = (Bitmap) extras.get("data");
        mImageView.setImageBitmap(imageBitmap);
    }
}

您是否在清单文件中进行了这些更改,请检查

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

【讨论】:

  • 我需要存储图片以便上传图片到服务器
  • 所以取回后压缩一下
【解决方案2】:

您在此处压缩原始图像:

bitmap.compress(Bitmap.CompressFormat.JPEG,100, bytes);

质量接受 0 - 100

0 = 最大压缩(适用于小图像的最低质量)

100 = 最小压缩(适用于大图像的 MAX 质量)

因此尝试更改 100 的值并检查质量。

【讨论】:

  • 已尝试将值更改为 100 可以提供比其他人更好的图像
  • 您的设备摄像头可能有问题。您需要检查您的相机设置或需要使用不同的设备进行测试。
  • 用近 4-5 台设备测试,但结果相同
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-17
  • 2022-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多