我正在做的是将相机中的图像绘制到 a 上canvas
,然后将view
包含图像的 a 转换为 abitmap
并将其绘制在画布上。然后最终bitmap
保存到外部存储。
问题是canvas
似乎将自身调整为预览窗口大小,而不是保存的图像大小。
这是我的活动类中将捕获的视图合并到相机图像顶部的部分:
Bitmap myImage = BitmapFactory.decodeByteArray(imageData, 0,
imageData.length, options);
Bitmap mutableBitmap = myImage.copy(Bitmap.Config.ARGB_8888, true);
Paint paint = new Paint();
Canvas canvas = new Canvas(mutableBitmap);
view.setDrawingCacheEnabled(true);
viewCapture = Bitmap.createBitmap(view.getDrawingCache());
view.setDrawingCacheEnabled(false);
canvas.drawBitmap(viewCapture, 0, 0, paint);
fileOutputStream = new FileOutputStream(dir + "/" + imgName + ".jpg");
BufferedOutputStream bos = new BufferedOutputStream(fileOutputStream);
mutableBitmap.compress(CompressFormat.JPEG, quality, bos);
这会将位图保存在捕获的图像之上,但由于大小不同,它会偏移到左上角。
我通过在我的 surfaceChanged 中执行以下操作来设置不同的大小
Camera.Parameters p = mCamera.getParameters();
Camera.Size myBestPreviewSize = getBestPreviewSize(w, h, p);
p.setPreviewSize(myBestPreviewSize.width, myBestPreviewSize.height);
Camera.Size myBestPictureSize = getBestPictureSize(w, h, p);
p.setPictureSize(myBestPictureSize.width, myBestPictureSize.height);
显然,通过这样做,我得到了预览窗口的最佳分辨率,以及捕获图像的最佳分辨率。我相信这个问题是由两种不同的解决方案引起的,但要弄清楚为什么我被困在哪里。
希望下面的图片能更好地描述这个问题:
此图像显示预览窗口。如您所见,Android 处于图像的中间。
我捕获了上面的图像并保存了它。我去查看它,这就是它的样子:
请注意,Android 不再位于中间,而是位于左上角。
作为另一项测试,我将 android 部分移出屏幕,如下一个相机预览所示
我完全按照上图所示捕获了图像,在查看它时,android 被完全切断了它在预览窗口中的样子,但是当它应该是全屏时,它又在左上角