onPictureTaken byte[] 某些设备中的小尺寸

Posted

技术标签:

【中文标题】onPictureTaken byte[] 某些设备中的小尺寸【英文标题】:onPictureTaken byte[] small size in some device 【发布时间】:2016-12-27 23:16:02 【问题描述】:

我正在创建自定义相机应用程序,我正在使用 Surfaceview。在我的应用程序中,我捕获了图片,但它在 Note 4 中完美运行,并且在小米手机中存在问题,我不是发生这种情况的原因。

注 4 onPictureTaken Byte[] 大小为原始大小。

但是

小米 onPictureTaken Byte[] 大小始终为 160x120

这是我的代码

     PictureCallback mPicture = new PictureCallback() 

        @Override
        public void onPictureTaken(byte[] data, Camera camera) 

            final BitmapFactory.Options sizeOptions = new BitmapFactory.Options();
//                sizeOptions.inJustDecodeBounds = false;
                sizeOptions.inScaled = false;
//                sizeOptions.inDither = false;
            sizeOptions.inPreferredConfig = Bitmap.Config.ARGB_8888;
            BitmapFactory.decodeByteArray(data, 0, data.length, sizeOptions);
            Log.d("onPictureTaken", "Bitmap is " + sizeOptions.outWidth + "x"
                    + sizeOptions.outHeight);


            int angleToRotate = getRoatationAngle(currentCameraId);
            Log.d("Tag", "Rotation angle: " + angleToRotate);
            if (currentCameraId == Camera.CameraInfo.CAMERA_FACING_FRONT)
                angleToRotate = angleToRotate + 180;

            final String albumId = Util.ReadSharePrefrence(getActivity(), Constant.SHRED_PR.KEY_Current_AlbumID);
            new SavePhotoTask(albumId, data, angleToRotate, isChecked, orientation).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
            camera.startPreview();
        
    ;

【问题讨论】:

【参考方案1】:

我发布了大约 3 个小时的问题,但没有人发表评论。

我知道是什么问题。这取决于参数部分Reference

这是我的代码

 private void initPreview(int width, int height) 
        if (camera != null && previewHolder.getSurface() != null) 
            try 
                camera.setPreviewDisplay(previewHolder);
             catch (Throwable t) 
//              Log.e("PreviewDemo-surfaceCallback","Exception in setPreviewDisplay()");
            
            Camera.Parameters parameters = camera.getParameters();
            Camera.Size size = getBestPreviewSize(width, height, parameters);
            parameters.setJpegQuality(90);
            if (size != null) 
                Log.d("", "initPreview: width  = "+size.width+ " height = "+size.height);
                parameters.setPreviewSize(size.width, size.height);
                parameters.setPictureSize(size.width, size.height);
                camera.setParameters(parameters);
                cameraConfigured = true;
            
        
    

【讨论】:

参数中width和height的值是多少?是想要的高度和宽度吗?? Arpit Patel:你的意思是小米手机默认图片尺寸设置为160x120?

以上是关于onPictureTaken byte[] 某些设备中的小尺寸的主要内容,如果未能解决你的问题,请参考以下文章

onPictureTaken 和 onPreviewFrame 的数据字节数组大小不同

从 onPictureTaken 结果裁剪圆形图像

如何在 onPictureTaken 中旋转和翻转位图

onPictureTaken 方法中的位图不是垃圾收集的

在 onPictureTaken 之后旋转 JPEG 的字节数组

PictureCallback 在“onPictureTaken”中获取字节 [] 数据,但它与我在 CameraView 中看到的图像不匹配。