Ibrahim Hernández Jorge Asked: 2020-04-24 10:18:49 +0800 CST 2020-04-24 10:18:49 +0800 CST 2020-04-24 10:18:49 +0800 CST Android 拍照时的像素化图像 772 我有一个使用相机的应用程序,问题是当我拍照时,像素化图像出现在 Android 相机应用程序的预览中,这是一个示例: 我像这样访问相机: val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE) startActivityForResult(takePictureIntent, TAKE_PICTURE) 正如我所说,在相机应用程序本身中图像被像素化,而不是在我的应用程序中,我后来也以这种方式接收图像。 android 1 Answers Voted Best Answer Jorgesys 2020-04-24T13:02:06+08:002020-04-24T13:02:06+08:00 这里的问题是,如果您在拍摄时展开图像,则会生成低质量的图像。使用相机保存图片时,建议先保存到磁盘中,以后可以从磁盘中获取,显示质量不错。 请记住,对于 Android 6.0 WRITE_EXTERNAL_STORAGE,除了在文件中定义权限之外,您还必须手动请求权限AndroidManifest.xml 存储权限错误 我添加一个完整的例子: public class MainActivity extends AppCompatActivity { private static final int PICTURE_RESULT = 122 ; private ContentValues values; private Uri imageUri; private Button myButton; private ImageView myImageView; private Bitmap thumbnail; String imageurl; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){ //Verifica permisos para Android 6.0+ if(!checkExternalStoragePermission()){ return; } } myImageView = (ImageView)findViewById(R.id.myImageView); myButton = (Button)findViewById(R.id.myButton); myButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { values = new ContentValues(); values.put(MediaStore.Images.Media.TITLE, "MyPicture"); values.put(MediaStore.Images.Media.DESCRIPTION, "Photo taken on " + System.currentTimeMillis()); imageUri = getContentResolver().insert( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); startActivityForResult(intent, PICTURE_RESULT); } }); } protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case PICTURE_RESULT: if (requestCode == PICTURE_RESULT) if (resultCode == Activity.RESULT_OK) { try { thumbnail = MediaStore.Images.Media.getBitmap(getContentResolver(), imageUri); myImageView.setImageBitmap(thumbnail); //Obtiene la ruta donde se encuentra guardada la imagen. imageurl = getRealPathFromURI(imageUri); } catch (Exception e) { e.printStackTrace(); } } } } public String getRealPathFromURI(Uri contentUri) { String[] proj = { MediaStore.Images.Media.DATA }; Cursor cursor = managedQuery(contentUri, proj, null, null, null); int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); return cursor.getString(column_index); } private boolean checkExternalStoragePermission() { int permissionCheck = ContextCompat.checkSelfPermission( this, Manifest.permission.WRITE_EXTERNAL_STORAGE); if (permissionCheck != PackageManager.PERMISSION_GRANTED) { Log.i("Mensaje", "No se tiene permiso para leer."); ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 225); } else { Log.i("Mensaje", "Se tiene permiso para leer!"); return true; } return false; } }
这里的问题是,如果您在拍摄时展开图像,则会生成低质量的图像。使用相机保存图片时,建议先保存到磁盘中,以后可以从磁盘中获取,显示质量不错。
请记住,对于 Android 6.0
WRITE_EXTERNAL_STORAGE
,除了在文件中定义权限之外,您还必须手动请求权限AndroidManifest.xml
存储权限错误
我添加一个完整的例子: