我正在尝试使用摄像头将图像上传到firebase。但是,我得到的图像质量太低(不可读)。我已经编写了以下代码(没有编译错误)。但是,我不明白为什么它不能产生一个可读的图像。
我尝试过改变位图的质量参数。压缩,但图像质量保持不变。但同样的压缩代码适用于来自gallery的图像。
uploadPp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
AlertDialog.Builder builder;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
builder = new AlertDialog.Builder(infoPp.this, android.R.style.Theme_Material_Dialog_NoActionBar_MinWidth);
} else {
builder = new AlertDialog.Builder(infoPp.this);
}
builder.setTitle("Picture Source")
.setMessage("Select source of picture")
.setPositiveButton("Camera", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE_CNIC);
}
}
})
.setNegativeButton("Gallery", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"), REQUEST_IMAGE_CAPTURE_CNIC);
}
})
.setIcon(android.R.drawable.ic_dialog_alert)
.show();
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
mProgress.setMessage("Uploading.....");
if (requestCode == REQUEST_IMAGE_CAPTURE_CNIC && resultCode == RESULT_OK) {
Bitmap imageBitmap;
try {
Bundle extras = data.getExtras();
imageBitmap = (Bitmap) extras.get("data");
mProgress.show();
encodeBitmapAndSaveToFirebase(imageBitmap,"ProfilePhoto");
}catch(Exception e) {
Uri file = data.getData();
mProgress.show();
encodeBitmapAndSaveToFirebase(file,"ProfilePhoto");
}
}
}
public void encodeBitmapAndSaveToFirebase(Bitmap bitmap,String fileName) { //////////// THISIS FOR CAMERA
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
path= "Verification Records/"+auth.getCurrentUser().getUid()+"/"+fileName+".jpeg";
byte[] data=baos.toByteArray();
StorageReference firememeRef = storage.getReference(path);
UploadTask uploadTask= firememeRef.putBytes(data);
...
}
public void encodeBitmapAndSaveToFirebase(Uri file,String fileName){ /// THIS IS FOR GALLERY
Uri selectedImage = file;
InputStream imageStream = null;
try {
imageStream = getContentResolver().openInputStream(
selectedImage);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Bitmap bmp = BitmapFactory.decodeStream(imageStream);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 40, stream);
String path= "Verification Records/"+auth.getCurrentUser().getUid()+"/"+fileName+".jpeg";
byte[] data=stream.toByteArray();
StorageReference firememeRef = storage.getReference(path);
UploadTask uploadTask= firememeRef.putBytes(data);
...
}'
data
额外提供的图像只是一个缩略图。要获取全尺寸图像,您需要提供相机应用程序应保存照片的完全限定文件名。这在留档中进行了描述,并提供了示例代码。
我已经开发了一个应用程序来拍摄一张照片并保存在画廊里。我在网上搜索过,我能练习的最简单的方法就是使用。下面是从相机上拍照的代码。注意,我在这个类中使用的是fragment。 获取捕获的图像并将其转换为字符串 我将字符串保存到全局变量中,以便其他活动可以访问它。在另一个活动中,我有一个按钮,通过访问图像字符串将图像保存到文件夹/图库中。 它可以将图像保存到文件夹/图库中......但是图像质量很低.
我有一个问题。当我试图从相机上拍照时,质量很低。首先,使用摄像头捕捉图片,然后保存到目录中,同时获取图片并显示在我的应用程序中。保存在目录中的图片质量很好,但当我从目录中获取时,质量很低。下面是我的示例代码: 任何解决方案/建议?谢谢:) 解决了的 当我遵循下面Antrromet给出的代码时,问题解决了
我有一个Android应用,可以打开相机拍照: 如果它被称为相机是打开的,我可以拍照。但是点击“确定”或“取消”的预览质量已经很差了。 这很奇怪,因为这不是我的应用程序实现的。是否有任何参数可供配置,以提高相机的质量。
我知道有很多这样的例子,但我还没有找到一个适用于7.0的可靠示例。我知道我设置的是图像的缩略图而不是原始图像,但我不确定如何获取它。 这是我的代码:
我正在使用画布来修改我的图像。但是,我有一个问题。如果我使用options.inSamplesize=4;图像变得太小,质量下降。但是,如果我不给,它会从内存溢出并给出一个错误。 //位图缩放位图=位图。创建位图(原始1、0、0、宽度、高度、矩阵、真); 这是我当前的错误日志。 11-09 03:21:56.849 12345-12345/com.example.chkee.appfrontE/A
当我用Android相机拍照时,我得到的是低质量的位图图像。我想知道是否有可能使这张照片质量良好。 我谷歌了一些关于它的信息,我想我必须使用EXTRA_OUTPUT(http://developer.android.com/reference/android/provider/MediaStore.html#ACTION_IMAGE_CAPTURE) 我很挣扎,因为我不知道该把它放在哪里,也不知道