Vin*_*rya 16 android byte image decoding
当试图转换byte[]的Camera.onPreviewFrame到Bitamp用BitmapFactory.decodeByteArray给我一个错误SkImageDecoder::Factory returned null
以下是我的代码:
public void onPreviewFrame(byte[] data, Camera camera) {
Bitmap bmp=BitmapFactory.decodeByteArray(data, 0, data.length);
}
Run Code Online (Sandbox Code Playgroud)
wes*_*ton 32
这很难找到!但是从API 8开始,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();
}
}
Run Code Online (Sandbox Code Playgroud)
从Android 3.0开始,您可以使用TextureView和TextureSurface显示相机,然后使用它mTextureView.getBitmap()来检索友好的RGB预览帧.
TextureView文档中给出了如何执行此操作的非常骨架的示例.请注意,您必须通过放入android:hardwareAccelerated="true"清单来将应用程序或活动设置为硬件加速.
很久之后我找到了答案。这里是...
我没有使用BitmapFactory,而是使用自定义方法将其解码byte[] data为有效的图像格式。要将图像解码为有效的图像格式,需要通过调用 来了解相机正在使用什么图片格式camera.getParameters().getPictureFormat()。这将返回一个由 定义的常量ImageFormat。知道格式后,使用适当的编码器对图像进行编码。
就我而言,它byte[] data是格式的YUV,所以我寻找YUV转换BMP,这解决了我的问题。
| 归档时间: |
|
| 查看次数: |
35735 次 |
| 最近记录: |