用android相机拍照

时间:2013-04-15 08:37:10

标签: android

我已经创建了自己的控制器,用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);

我首先认为我的ImageViewImageView的高度和宽度而受到一些限制,但事实并非如此。这是布局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>

这是捕获图像时的结果

enter image description here  有谁知道这里发生了什么?为什么缩放图像?

2 个答案:

答案 0 :(得分:5)

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

此外,即使这样,您也必须在byte[]中使用比例因子打开它,以便将其作为BitmapFactory.Options的内存。

同时检查Camera.Parameters上的Bitmap并查看setPictureSize()支持的尺寸。


让Android为您拍照

您可以让Android系统相机应用程序拍摄全分辨率照片,然后使用以下示例返回getSupportedPictureSizes()Allow user to select camera or gallery for image。在您的Activity被相机捕获后,您将可以访问全分辨率保存的图像文件。

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

答案 1 :(得分:0)

如何实现flipByteArrayNintyDegress?

/亚龙