2

我创建了自己的控制器来使用 android 相机拍照。我的问题是输出显示的图像比预期的要小。我检查了我的位图的宽度和高度,如下所示:

int w = bmp.getWidth();
int h = bmp.getHeight();

这个输出w = 480h = 640我假设是像素大小。这是我的拍照方法

public void takePicture() {
        Log.i("Camera View: ", "Take Picture");
        camera.takePicture(null, null, new PictureCallback() {
            @Override
            public void onPictureTaken(byte[] data, Camera camera) {
                if (null != callback) {
                    callback.onJpegPictureTaken(data, camera);

                }
            }
        });
 }

Activity订阅此活动的地方onJpegPictureTaken

    @Override
    public void onJpegPictureTaken(byte[] data, Camera camera) {
        Intent i = new Intent(this, ImageEditing.class);
        i.putExtra("image", data);
        startActivity(i);
    }

这样做的目的是启动一个新Activity的以编辑图像,如缩放和拖动。这个 ImageEditing.class 得到这样的图片:

flipped = flipByteArrayNintyDegress(getIntent().getExtras()
                .getByteArray("image"));

        Bitmap bmp = BitmapFactory.decodeByteArray(flipped, 0, flipped.length);
        image = (ImageView) findViewById(R.id.imageView1);
        image.setImageBitmap(bmp);
        image.setOnTouchListener(this);

我首先认为ImageView由于 的高度和宽度,我有一些限制ImageView,但事实并非如此。这是布局 XML:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="matrix"/>

</FrameLayout>

这是我捕获图像时的结果

在此处输入图像描述 有人知道这里发生了什么吗?为什么要缩放图像?

4

2 回答 2

6

data返回的 to旨在onJpegPictureTaken()作为缩略图表示。您收到Camera.ParametersgetSupportedJpegThumbnailSizes()报告的尺寸之一。您的相机中没有足够的堆内存来通过数组发送整个全分辨率图像,甚至压缩/编码为 Jpeg 图像。因此,发送缩略图是一种快速预览结果的方式。您必须找到图像的存储位置才能以全分辨率访问它。byte[]

此外,即使那样,您也必须使用比例因子打开它,BitmapFactory.Options以便将其记忆为Bitmap.

还要检查setPictureSize()Camera.Parameters检查可用的支持尺寸getSupportedPictureSizes()


让 Android 为您拍照

Activity您可以使用以下示例使 Android 系统相机应用程序拍摄全分辨率照片并返回给您:允许用户为图像选择相机或图库。您Activity将可以访问相机捕获的全分辨率保存的图像文件。

为了以全分辨率翻转或旋转此图像(无法以该大小打开为 a Bitmap),您可以修改描述 AFine 转换的 EXIF 数据。这不会修改实际的像素数据,但会改变它在大多数系统上的显示方式。在这个站点上有几个如何读写 EXIF 数据的示例,但我目前没有可用的代码示例。

于 2013-04-15T08:43:12.780 回答
0

那么flipByteArrayNintyDegress的实现呢?

/亚龙

于 2013-04-15T08:45:27.107 回答