我已经创建了自己的控制器,用Android相机拍照。我的问题是输出显示的图像比预期的要小。我已经检查了我的位图的宽度和高度:
int w = bmp.getWidth();
int h = bmp.getHeight();
这会输出w = 480
和h = 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>
这是捕获图像时的结果
有谁知道这里发生了什么?为什么缩放图像?
答案 0 :(得分:5)
返回data
的{{1}}用作缩略图表示。您收到了Camera.Parameters中onJpegPictureTaken()
报告的尺寸之一。相机中没有足够的堆内存通过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?
/亚龙