2013-04-15 155 views
2

我已经创建了自己的控制器用安卓相机拍照。我的问题是,输出显示比预期的更小的图像。我检查了我的位图的宽度和高度是这样的:用安卓相机拍照

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

此输出w = 480h = 640我以为是在像素尺寸。这是我拍摄照片

​​

方法凡我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> 

下面是结果,当我拍摄图像

enter image description here 有谁知道这是怎么回事呢?为什么图像被缩放?

+2

你的形象是SOOOOO元 – Prisoner

回答

5

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

此外,即使那么您将不得不用BitmapFactory.Options中的比例因子打开它,以便将它作为Bitmap的内存来使用。

还检查Camera.Parameters上的setPictureSize(),并检查getSupportedPictureSizes()可用的支持的尺寸。


允许Android拍照为您

您可能会导致Android系统的摄像头应用程序采取全分辨率的图片,并返回到您的Activity之后使用象这样的例子:Allow user to select camera or gallery for image。您的Activity将在摄像头捕获到全分辨率保存的图像文件后访问。

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

+0

所以我需要将图像保存了'onJpegPictureTaken()'里面? –

+0

不,这没有帮助。无论您如何使用该功能,您在该功能中获得的缩略图数据都不会变大。你可以用'setPictureSize()'使它更大,但不能太大。 –

+0

Hrmp。很烦人.. –

0

flipByteArrayNintyDegress的执行情况如何?

/亚龙

+0

输出分辨率与输入分辨率相同。 –