从相机捕获时图像质量不佳

我有一个问题。 当我试图从相机获取图片时,质量非常低。 首先,使用相机捕捉图片,而不是保存到目录,同时得到该图片,并显示在我的应用程序。保存在目录内的图片是一个很好的质量,但是当我从目录得到它的质量低。 下面是我的示例代码:

public void onActivityResult(int requestCode, int resultCode, Intent intent) { if (requestCode == CAMERA_PIC_REQUEST) { Bitmap thumbnail = (Bitmap) intent.getExtras().get("data"); if (g==1) { ImageView myImage = (ImageView) findViewById(R.id.img5); myImage.setImageBitmap(thumbnail); View a = findViewById(R.id.img5); a.setVisibility(View.VISIBLE); ByteArrayOutputStream stream = new ByteArrayOutputStream(); thumbnail.compress(Bitmap.CompressFormat.JPEG, 100, stream); byteArray1 = stream.toByteArray(); } } 

任何解决scheme/build议? 谢谢 :)

解决了

我按照下面的Antrromet给出的代码解决了这个问题

我已经使用了下面的代码,这对我来说工作得很好。

  values = new ContentValues(); values.put(MediaStore.Images.Media.TITLE, "New Picture"); values.put(MediaStore.Images.Media.DESCRIPTION, "From your Camera"); 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); imgView.setImageBitmap(thumbnail); 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); } 

我会给你一些适合我的东西。 我也是这样问的

将图片保存到特定文件夹而不会丢失质量的解决scheme

我find了解决scheme:

// 创build一个新的文件夹代码:

  String path = String.valueOf(Environment.getExternalStorageDirectory()) + "/your_name_folder"; try { File ruta_sd = new File(path); File folder = new File(ruta_sd.getAbsolutePath(), nameFol); boolean success = true; if (!folder.exists()) { success = folder.mkdir(); } if (success) { Toast.makeText(MainActivity.this, "Carpeta Creada...", Toast.LENGTH_SHORT).show(); } } catch (Exception ex) { Log.e("Carpetas", "Error al crear Carpeta a tarjeta SD"); } Intent i = new Intent(MainActivity.this, MainActivity.class); startActivity(i); finish();//agregue este 

// 拍照的方法

 public void clickFoto(View view) { takePic(); } 

// takePic()

  private void takePic() { String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); *File file = new File(Environment.getExternalStorageDirectory(), "/your_name_folder/a" + "/photo_" + timeStamp + ".png");* imageUri = Uri.fromFile(file); Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); startActivityForResult(intent, PICTURE_RESULT); } 

// onActivityResult

 public void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case PICTURE_RESULT: if (requestCode == PICTURE_RESULT) if (resultCode == Activity.RESULT_OK) { try { Bitmap thumbnail = MediaStore.Images.Media.getBitmap( getContentResolver(), imageUri); imgFoto.setImageBitmap(thumbnail); imageurl = getRealPathFromURI(imageUri); } catch (Exception e) { e.printStackTrace(); } } } } 

// getRealPathFromUri

 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); }