在我的应用程序中,我通过Android摄像头捕获照片,然后我想将其发送到服务器。为此我使用Client Socket编程。我将捕获照片转换为bytearray(byte []),然后将其发送到服务器。每件事都在事实上发挥作用。
问题在于我无法将原始照片发送到服务器。缩略图照片由Android手机发送。但是当我通过相机捕捉照片时,原始照片就在画廊中。
如何在我的应用程序中使用此原始照片?
我的代码:
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra("outputFormat",Bitmap.CompressFormat.JPEG);
cameraIntent.putExtra("return-data", true);
startActivityForResult(Intent.createChooser(cameraIntent, "Select Picture"),
CAMERA_REQUEST);
在onActivityResult方法中:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == CAMERA_REQUEST) {
Bitmap photo = (Bitmap) data.getExtras().get("data");
// byte[] a = (byte[]) data.getExtras().getByteArray("data"); // I also use this but not work
ByteArrayOutputStream bos = new ByteArrayOutputStream();
photo.compress(CompressFormat.JPEG, 100, bos);
byte[] bitmapdata = bos.toByteArray();
}
}
bitmapdata 照片中的是否有压缩照片而不是原始照片。 有些人说,将压缩(CompressFormat.JPEG,100,bos); 的质量字段改为0到100之间但不会发生任何事情。
- >> 还有其他方法可以获取相机拍摄的原始照片
- >> 当照片在我的电脑的文件夹中时,我通过提供路径来阅读文件中的这张照片。 ex- 文件文件=新文件(c:\ newphoto \ image.jpg); 。我可以在android中使用此代码来阅读原始照片,因为我知道照片的名称和位置。如果是,那么在图库中阅读照片的路径是什么。如果我将路径指定为: \ DCIM \ Camera \ photoName.jpg ,这是否有效。
- >> 或者我当前代码中的某些更改需要它会正常工作吗?
答案 0 :(得分:6)
您正在使用意图使用ACTION_IMAGE_CAPTURE
捕获图像。如果您通常使用Intent启动相机,那么它将在onActivityResult()中将图像作为位图返回,但它将用于缩略图。
如果您想从相机获得全分辨率图像,那么您应该提供一个文件,其中包含您要启动相机活动的目的。
你可以这样做
Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
File out = Environment.getExternalStorageDirectory();
out = new File(out, imagename);
i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(out));
startActivityForResult(i, CAMERA_RESULT);
这里有一个MediaStore.EXTRA_OUTPUT
参数,它带有你希望你的相机写一个图像的文件的Uri。
有关详细信息,请参阅以下示例