【发布时间】:2018-09-26 07:44:48
【问题描述】:
我正在开发我的应用程序中的相机功能。我正在捕获图像并将其传递给另一个活动。我面临的问题是,当我在另一个活动中显示图像时,由于某种原因它会丢失其原始结果(被像素化)。我就是这样做的:
private void takePhotoFromCamera() {
if(ActivityCompat.checkSelfPermission(EnterDataView.this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED){
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_REQUEST);
}else {
String[] permissionRequest = {Manifest.permission.CAMERA};
requestPermissions(permissionRequest, 8675309);
}
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode == RESULT_OK || resultCode != RESULT_CANCELED){
if(requestCode == CAMERA_REQUEST){
Bitmap mphoto = (Bitmap) data.getExtras().get("data");
Intent passPhoto = new Intent(this, Photo.class);
passPhoto.putExtra("byteArray",mphoto);
passPhoto.putExtra("Caller", getIntent().getComponent().getClassName());
startActivity(passPhoto);
}
}
}
像这样在其他活动中获取图像:
if(getIntent().hasExtra("byteArray")) {
//ImageView _imv= new ImageView(this);
/*Bitmap _bitmap = BitmapFactory.decodeByteArray(
getIntent().getByteArrayExtra("byteArray"),0,getIntent().getByteArrayExtra("byteArray").length);*/
Intent intent_camera = getIntent();
Bitmap camera_img_bitmap = (Bitmap) intent_camera
.getParcelableExtra("byteArray");
//_imv.setImageBitmap(_bitmap);
View view = mInflater.inflate(R.layout.gallery_item, mGallery, false);
ImageView img = (ImageView) view
.findViewById(R.id.id_index_gallery_item_image);
//String uri = getPhotos.getString(getPhotos.getColumnIndex(("uri")));
//Uri mUri = Uri.parse(uri);
//img.setImageURI(mUri);
//byte[] blob = getPhotos.getBlob(getPhotos.getColumnIndex("image"));
//Bitmap bmp = BitmapFactory.decodeByteArray(blob, 0, blob.length);
//bmpImage.add(bmp);
img.setImageBitmap(camera_img_bitmap);
mGallery.addView(view);
}
我的 XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/id_index_gallery_item_image"
android:layout_width="@dimen/_300sdp"
android:layout_height="@dimen/_300sdp"
android:layout_alignParentTop="true"
android:layout_marginLeft="@dimen/_10sdp"
android:layout_marginTop="@dimen/_50sdp"
android:scaleType="centerCrop" />
</RelativeLayout>
我做错了什么?
【问题讨论】:
-
代码乍一看还可以,能否提供您用来显示它的布局文件?会不会是图像被加载到的 ImageView 的大小或比例扭曲或拉伸?
-
@Harry 可能是...我也上传了 xml,请看一下
-
@3iL 尝试删除
android:scaleType="centerCrop" -
@Navneetヅ,我做了,但没用
-
@3iL 将此问题固定于此,您可以尝试删除
layout_marginTop、layout_marginLeft属性,并将layout_height和layout_width的值从@dimen/_300sdp更改为wrap_content。这样做应该以原始形式显示图像,而不会改变任何大小或比例。如果在此之后它仍然失真,那可能是完全不同的问题!
标签: android android-camera android-bitmap android-camera-intent