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 不起作用?

BitmapFactory:无法解码流:java.io.FileNotFoundException

BitmapFactory.Options参数作用

BitmapFactory.decodeStream() 返回的位图是原始位图的 100 倍