从最近几天开始,我遇到的相机影像问题太小,尺寸<120> 160 。
场景是当我从相机捕获图像并将该图像转换为byte []时,它变得太小。
以下是我正在使用的代码:
Bitmap unscaledBitmap = (Bitmap) data.getExtras().get("data");
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
unscaledBitmap .compress(Bitmap.CompressFormat.PNG, 30, bytes);
byte[] bytesDoc1 = bytes.toByteArray();
对此没有任何了解,但我尝试了许多解决方案,但都没有为我工作。
请帮帮我。
答案 0 :(得分:5)
您需要指定相机意图存储真实图像的路径。因为data.getExtras().get("data");
只是从真实图像中获取缩略图。
看看这段代码:
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// Create the File where the photo should go
File photoFile = createImageFile();
if (photoFile != null) {
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile));
startActivityForResult(takePictureIntent, 1);
}
这是创建文件的方法:
private File createImageFile() {
long timeStamp = System.currentTimeMillis();
String imageFileName = "NAME_" + timeStamp;
File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(
imageFileName, /* prefix */
".jpg", /* suffix */
storageDir /* directory */
);
return image;
}
然后你可以阅读创建图片的真实路径。
答案 1 :(得分:0)
你得到的只是缩略图。
如果您希望真实图像最好为相机提供存储图像的文件路径。您可以在onActivityResult中使用该路径。
答案 2 :(得分:0)
不确定是否为时已晚,无法帮助您解决此问题。我也遇到了这个问题,并且弄明白为什么这张照片太小了。
原因是因为在某些手机(LG Tribute 5)上,默认图片大小以某种方式使用最低的(160x120)。为了解决此错误,您必须从相机获取支持的图片大小列表。
像>>> from os.path import splitext
>>> data_set = ['1600.csv', '2405.csv', '6800.csv', '10000.csv', '21005.csv']
>>> def convert_to_int(file_name):
return int(splitext(file_name)[0])
>>> min(data_set, key=convert_to_int)
'1600.csv'
>>> max(data_set, key=convert_to_int)
'21005.csv'
这样的东西,并尝试选择您想要的最低分辨率,然后将camera.getParameters.getSupportedPictureSizes()
设置为您选择的最佳匹配尺寸。
这肯定会解决问题。
答案 3 :(得分:-1)
我使用了scaleType fitXY
,并且有效
<ImageView
android:id="@+id/imgPicture"
android:layout_width="70dp"
android:layout_height="70dp"
scaleType="fitXY"/>