在尝试使用BitmapFactory.decodeByteArray
将Camera.onPreviewFrame
的byte[]
转换为Bitamp
时,出现错误SkImageDecoder::Factory returned null
以下是我的代码:
public void onPreviewFrame(byte[] data, Camera camera) {
Bitmap bmp=BitmapFactory.decodeByteArray(data, 0, data.length);
}
发布于 2011-03-18 14:56:55
经过很长一段时间,我找到了答案。这就是..。
我没有使用BitmapFactory
,而是使用我的自定义方法将此byte[] data
解码为有效的图像格式。要将图像解码为有效的图像格式,需要通过调用camera.getParameters().getPictureFormat()
知道相机正在使用哪种图像格式。这将返回由ImageFormat
定义的常量。知道格式后,使用适当的编码器对图像进行编码。
在我的例子中,byte[] data
是YUV
格式的,所以我寻找YUV
到BMP
的转换,这解决了我的问题。
发布于 2011-06-02 04:58:14
这已经很难找到了!但是从API8开始,android.graphics中就有了一个YuvImage类。它不是Image的后代,所以你能做的就是把它保存到Jpeg,但是如果你需要的话,你可以把它保存到内存流,然后加载到Bitmap Image中。
import android.graphics.YuvImage;
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
try {
Camera.Parameters parameters = camera.getParameters();
Size size = parameters.getPreviewSize();
YuvImage image = new YuvImage(data, parameters.getPreviewFormat(),
size.width, size.height, null);
File file = new File(Environment.getExternalStorageDirectory()
.getPath() + "/out.jpg");
FileOutputStream filecon = new FileOutputStream(file);
image.compressToJpeg(
new Rect(0, 0, image.getWidth(), image.getHeight()), 90,
filecon);
} catch (FileNotFoundException e) {
Toast toast = Toast
.makeText(getBaseContext(), e.getMessage(), 1000);
toast.show();
}
}
发布于 2012-09-12 21:39:15
从Android3.0开始,你可以使用TextureView
和TextureSurface
来显示摄像头,然后使用mTextureView.getBitmap()
来检索友好的RGB预览帧。
the TextureView docs中给出了一个非常简单的示例来说明如何做到这一点。请注意,您必须将应用程序或活动设置为硬件加速,方法是将android:hardwareAccelerated="true"
放入清单中。
https://stackoverflow.com/questions/5212531
复制相似问题