BitmapFactory decodeByteArray 裁剪图像
Posted
技术标签:
【中文标题】BitmapFactory decodeByteArray 裁剪图像【英文标题】:BitmapFactory decodeByteArray crops Image 【发布时间】:2017-06-27 10:05:52 【问题描述】:我的 android 应用程序遇到了一个奇怪的问题。 我有一个自定义的相机屏幕来拍摄文件。
正如您在图片中看到的,Galaxy S4 (Android 5.0.1) 保存的图像与相机屏幕相同,但在 Galaxy S7 (Android 6.0.1) 中,图像是从顶部和底部裁剪的。
S4 相机屏幕
S4 结果图片
S7 相机屏幕
S7 结果图片
我的相关代码块是; "onPictureTaken"
@Override
public void onPictureTaken(byte[] data, Camera camera)
if (data == null)
return;
Bitmap bmp = Tools.getBitmap(data);
super.onBackPressed();
“获取位图”
public class Tools
/*.....*/
public static Bitmap getBitmap(byte[] data)
/*.....*/
Bitmap unscaledBitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
return unscaledBitmap;
谁能解释为什么会这样?
提前致谢
【问题讨论】:
我相信这是因为相机预览分辨率与其输出分辨率不同。 【参考方案1】:经过多次尝试,我发现了上面提到的 Naveen 关于输出图片大小的问题,并用 setPictureSize() 解决了它
Camera.Size size=getBestPreviewSize(display.getHeight(), display.getWidth(), parameters);
parameters.setPreviewSize(size.width, size.height);
parameters.setPictureSize(size.width, size.height);
this.camera.setParameters(parameters);
【讨论】:
【参考方案2】:我不认为 S4 图像与屏幕相同,底部和左侧有灰色区域。
基本上,如果您裁剪的图像与屏幕比例不同,则图像不会填满整个屏幕。然后,您可以显示空白区域(您正在显示的灰色区域)或将其居中裁剪,这将剪切图像的侧面。
【讨论】:
以上是关于BitmapFactory decodeByteArray 裁剪图像的主要内容,如果未能解决你的问题,请参考以下文章
BitmapFactory.decodeByteArray OutOfMemory
BitmapFactory.decodeStream 总是返回空值
在啥情况下 BitmapFactory.Options.inPreferredConfig 不起作用?