gpt4 book ai didi

java - BitmapFactory.decodeByteArray() 返回 NULL

转载 作者:IT老高 更新时间:2023-10-28 20:49:49 37 4
gpt4 key购买 nike

我正在使用相机的 previewCallback 来尝试抓取图像。这是我正在使用的代码

private Camera.PreviewCallback mPrevCallback = new Camera.PreviewCallback() 
{
public void onPreviewFrame( byte[] data, Camera Cam ) {
Log.d("CombineTestActivity", "Preview started");
Log.d("CombineTestActivity", "Data length = "
+ data.length );
currentprev = BitmapFactory.decodeByteArray( data, 0,
data.length );

if( currentprev == null )
Log.d("CombineTestActivity", "currentprev is null" );

Log.d("CombineTestActivity", "Preview Finished" );

}
};

数据的长度总是与576000相同。

我还尝试更改相机的参数,以便图像以不同的格式返回。这是我这样做时的样子。

mCamera = Camera.open();
camParam = mCamera.getParameters();
camParam.setPreviewFormat( ImageFormat.RGB_565 );
mCamera.setParameters( camParam );
mCamera.setPreviewCallback( mPrevCallback );

但是,当我更改预览格式以及将其保留为 NV21 的默认值时,BitmapFactory.decodeByteArray 返回为空。我还尝试将预览格式更改为 JPEG 类型。我什至在 ddms 中得到了一个调试语句,这就是我得到的

“D/skia (14391): --- SkImageDecoder::Factory 返回 null”

最佳答案

好的,希望这会有所帮助。

搜索互联网寻找快速解决方案,并找到了完美的东西。

这适用于 Android 2.1

感谢 this page 的 off3nsiv3 .

// Convert to JPG
Size previewSize = camera.getParameters().getPreviewSize();
YuvImage yuvimage=new YuvImage(data, ImageFormat.NV21, previewSize.width, previewSize.height, null);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
yuvimage.compressToJpeg(new Rect(0, 0, previewSize.width, previewSize.height), 80, baos);
byte[] jdata = baos.toByteArray();

// Convert to Bitmap
Bitmap bmp = BitmapFactory.decodeByteArray(jdata, 0, jdata.length);

只需对 off3nsiv3 的代码稍作修改即可。与手动解码相比,FPS 仍然非常高。

对于上面的代码,80 是 jpeg 质量(0 从 100,100 最好)。

关于java - BitmapFactory.decodeByteArray() 返回 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3338235/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com