我已经创建了自己的控制器,用Android相机拍照.我的问题是输出显示的图像比预期的要小.我已经检查了我的位图的宽度和高度,如下所示:
int w = bmp.getWidth();
int h = bmp.getHeight();
Run Code Online (Sandbox Code Playgroud)
这个输出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);
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
我Activity订阅此活动的地方onJpegPictureTaken
@Override
public void onJpegPictureTaken(byte[] data, Camera camera) {
Intent i = new Intent(this, ImageEditing.class);
i.putExtra("image", data);
startActivity(i);
}
Run Code Online (Sandbox Code Playgroud)
这样做的目的是启动一个新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);
Run Code Online (Sandbox Code Playgroud)
我首先想到的是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>
Run Code Online (Sandbox Code Playgroud)
这是捕获图像时的结果
有谁知道这里发生了什么?为什么缩放图像?
在data返回onJpegPictureTaken()的目的是作为一个缩略图表示.您收到报告的尺寸之一getSupportedJpegThumbnailSizes()的Camera.Parameters.没有在你的相机足够的堆内存通过发送一个完整的全分辨率图像byte[]阵列,甚至压缩/编码为JPEG图像.因此,缩略图作为预览结果的快速方式发送.您必须找到图像的存储位置才能以全分辨率访问它.
此外,即使这样,你也必须用比例因子打开它,BitmapFactory.Options以便将它作为一个内存Bitmap.
还要检查setPictureSize()在Camera.Parameters和检查提供与支持的尺寸getSupportedPictureSizes().
让Android为您拍照:
您可能会导致Android系统的摄像头应用程序采取全分辨率的图片,并返回到你Activity以后使用象这样的例子:允许用户选择相机或画廊的形象.Activity在相机捕获后,您将可以访问全分辨率保存的图像文件.
为了以全分辨率翻转或旋转此图像(无法以该大小打开Bitmap),您可以修改描述AFine变换的EXIF数据.这不会修改实际的像素数据,但会改变它在大多数系统上显示的方式.有几个如何在这个网站上读取和写入EXIF数据的例子,但是我没有一个我目前可用的代码示例.
| 归档时间: |
|
| 查看次数: |
1711 次 |
| 最近记录: |