简体   繁体   English

使用YuvImage压缩时出现奇怪的错误

[英]Strange error when compressing using YuvImage

I would like to crop image directly from the Camera Preview using a Rectangle.I get the following error in my LogCat when the following code is used: 我想使用Rectangle直接从Camera Preview裁剪图像。当使用以下代码时,我的LogCat中出现以下错误:

skia(24596): onFlyCompress
AndroidRuntime(24596): FATAL EXCEPTION: main
AndroidRuntime(24596): java.lang.NullPointerException
AndroidRuntime(24596):  at com.example.mycameraapp.CameraActivity.getBoundData(CameraActivity.java:417)
AndroidRuntime(24596):  at com.example.mycameraapp.CameraActivity$2.onPreviewFrame(CameraActivity.java:320)
AndroidRuntime(24596):  at android.hardware.Camera$EventHandler.handleMessage(Camera.java:791)
AndroidRuntime(24596):  at android.os.Handler.dispatchMessage(Handler.java:99)
AndroidRuntime(24596):  at android.os.Looper.loop(Looper.java:137)
AndroidRuntime(24596):  at android.app.ActivityThread.main(ActivityThread.java:5103)
AndroidRuntime(24596):  at java.lang.reflect.Method.invokeNative(Native Method)
AndroidRuntime(24596):  at java.lang.reflect.Method.invoke(Method.java:525)
AndroidRuntime(24596):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
AndroidRuntime(24596):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
AndroidRuntime(24596):  at dalvik.system.NativeStart.main(Native Method)

My code generates error in the method getBoundData presumably when I use YuvImage and compressToJpeg methods.The code of the methods is here: 我的代码在方法getBoundData生成错误,大概是当我使用YuvImagecompressToJpeg方法时。方法的代码在这里:

  ByteArrayOutputStream bos;
public byte[] getBoundData(final byte[] data,final Rect rect)
{
    /*int h=mCamera.getParameters().getPictureSize().height;
    int w=mCamera.getParameters().getPictureSize().width;
    int bitsPerPixel=ImageFormat.getBitsPerPixel(mCamera.getParameters().getPictureFormat());
    int bufferSize=w*h*(bitsPerPixel/8);
    byte[] out=new byte[bufferSize];*/
    new Thread()
    {
        public void run()
        {
            final int h=mCamera.getParameters().getPreviewSize().height;
            final int w=mCamera.getParameters().getPreviewSize().width;
            YuvImage yuvImage=new YuvImage(data,ImageFormat.NV21,w,h,null);
            bos=new ByteArrayOutputStream();
            yuvImage.compressToJpeg(rect, 100, bos);
        }
    }.start();  
    //Log.d(TAG,"Bound Array Size: "+bos.size());
    return bos.toByteArray();
}

This method is called within the PreviewCallback like this: 在PreviewCallback中调用此方法,如下所示:

 PreviewCallback mPreviewCallback=new PreviewCallback() {

    @Override
    public void onPreviewFrame(byte[] data, Camera camera) {
        // TODO Auto-generated method stub
        byte[] boxData=null;
        Rect rect=mBox.getRect();
        if(rect!=null)
            boxData=getBoundData(data,rect);
        else
            boxData=data;
                //file saving code...previously tested.

This is called in using mCamera.setPreviewCallback(mPreviewCallback); 这是使用mCamera.setPreviewCallback(mPreviewCallback);调用的mCamera.setPreviewCallback(mPreviewCallback); within the doSnap method. doSnap方法中。

What causes this error and how do I rectify it? 导致此错误的原因是什么?如何纠正? Also,is this the best way of cropping Image directly from the CameraPreview in Android. 此外,这是直接从Android中的CameraPreview裁剪图像的最佳方式。

return bos.toByteArray();

You bos is null here. 你这里的bosnull It is only initialized in a background thread later. 它仅在后台线程中初始化。

If you need to communicate data back from a background thread, use eg a callback interface. 如果需要从后台线程传回数据,请使用例如回调接口。 AsyncTask makes background thread task handling much simpler BTW. AsyncTask使后台线程任务处理更简单BTW。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 使用YuvImage从bitmao裁剪矩形区域会产生奇怪的结果 - Cropping rectangular area from bitmao using YuvImage produces strange result 一次在多个YuvImage上使用compresstojpeg时内存不足 - Out of Memory when using compresstojpeg on multiple YuvImage one at a time 使用自定义建议提供程序时,Android中出现奇怪的NullPointerException错误 - Strange NullPointerException error in android when using custom suggestions provider 使用libjpegturbo压缩批量图片时出现奇怪的结果 - Strange results while compressing batch of pictures with libjpegturbo 使用 GZIPOutputStream 压缩字符串 - Compressing a string using GZIPOutputStream 从onCreate调用addPreferencesFromResource时在PreferenceFragment中使用onCreateView时出现奇怪错误 - Strange Error using onCreateView in PreferenceFragment when calling addPreferencesFromResource from onCreate 压缩Bitmap时的Android IOException - Android IOException when compressing a Bitmap 执行httpclient时出现奇怪的错误 - Strange error when execute httpclient 将图像导入Eclipse时非常奇怪的错误 - Very strange error when importing images to Eclipse 压缩图像时出现空指针异常 - Null pointer exception when compressing image
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM