마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 프리뷰 캡쳐 오류

0 추천
public class MainActivity extends Activity {
    private Preview mPreview;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        mPreview = new Preview(this);
        setContentView(mPreview);
    }
}
class Preview extends SurfaceView implements SurfaceHolder.Callback {
    SurfaceHolder mHolder;
    Camera mCamera;
    String mRootPath;
    static final String PICFOLDER = "CameraTest";
    Preview(Context context) {
        super(context);
        mHolder = getHolder();
        mHolder.addCallback(this);
        mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    }

    public void surfaceCreated(SurfaceHolder holder) {
        mCamera = Camera.open();
        try {
            mCamera.setPreviewDisplay(holder);
        } catch (IOException exception) {
            mCamera.release();
            mCamera = null;
        }
    mCamera.setPreviewCallback(new Camera.PreviewCallback() {
        @Override
        public void onPreviewFrame(byte[] data, Camera camera) {
            Camera.Parameters params = camera.getParameters();

            int w = params.getPreviewSize().width;
            int h = params.getPreviewSize().height;
            int format = params.getPreviewFormat();

            YuvImage image = new YuvImage(data, format, w, h, null);
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            Rect area = new Rect(0, 0, w, h);
            image.compressToJpeg(area, 50, out);
            Bitmap bm = BitmapFactory.decodeByteArray(out.toByteArray(), 0, out.size());
            Calendar calendar = Calendar.getInstance();
            String FileName = String.format("SH%02d%02d%02d-%02d%02d%02d.jpg",
                    calendar.get(Calendar.YEAR) % 100, calendar.get(Calendar.MONTH) + 1,
                    calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.HOUR_OF_DAY),
                    calendar.get(Calendar.MINUTE), calendar.get(Calendar.SECOND));
            mRootPath = Environment.getExternalStorageDirectory().getAbsolutePath() +
                    "/" + PICFOLDER;
            String path = mRootPath + "/" + FileName;
            SaveBitmapToFileCache(bm, path);
        }
        private void SaveBitmapToFileCache(Bitmap bitmap, String strFilePath) {
            File fileCacheItem = new File(strFilePath);
            OutputStream out = null;
            try {
                fileCacheItem.createNewFile();
                out = new FileOutputStream(fileCacheItem);
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    out.close();
                } catch (IOException e)
                {
                    e.printStackTrace();
                } } } });
}
    public void surfaceDestroyed(SurfaceHolder holder) {
        mCamera.stopPreview();
        mCamera = null;
    }
    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
        Camera.Parameters parameters = mCamera.getParameters();
        parameters.setPreviewSize(w, h);
        mCamera.setParameters(parameters);
        mCamera.startPreview();
    }
}

로그캣

09-27 23:25:58.211    4453-4453/codename.humanitas E/Trace﹕ error opening trace file: No such file or directory (2)
09-27 23:25:58.211    4453-4453/codename.humanitas D/ActivityThread﹕ setTargetHeapUtilization:0.25
09-27 23:25:58.211    4453-4453/codename.humanitas D/ActivityThread﹕ setTargetHeapIdealFree:8388608
09-27 23:25:58.211    4453-4453/codename.humanitas D/ActivityThread﹕ setTargetHeapConcurrentStart:2097152
09-27 23:25:58.311    4453-4453/codename.humanitas I/Adreno200-EGL﹕ <qeglDrvAPI_eglInitialize:269>: EGL 1.4 QUALCOMM build:  (CL2819715)

09-27 23:25:58.962    4453-4453/codename.humanitas E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.NullPointerException
            at codename.humanitas.Preview$1.SaveBitmapToFileCache(MainActivity.java:131)
            at codename.humanitas.Preview$1.onPreviewFrame(MainActivity.java:104)
            at android.hardware.Camera$EventHandler.handleMessage(Camera.java:815)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4885)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
            at dalvik.system.NativeStart.main(Native Method)

제 나름대로 이해하고 변형하기는 했는데

오류가 발생하네요

SaveBitmapToFileCache 쪽에 문제가 있는듯 한데 어떻게 해결하죠?

익명사용자 님이 2015년 9월 27일 질문
전체 로그캣 입니다.
09-27 23:25:58.211    4453-4453/codename.humanitas E/Trace﹕ error opening trace file: No such file or directory (2)
09-27 23:25:58.211    4453-4453/codename.humanitas D/ActivityThread﹕ setTargetHeapUtilization:0.25
09-27 23:25:58.211    4453-4453/codename.humanitas D/ActivityThread﹕ setTargetHeapIdealFree:8388608
09-27 23:25:58.211    4453-4453/codename.humanitas D/ActivityThread﹕ setTargetHeapConcurrentStart:2097152
09-27 23:25:58.311    4453-4453/codename.humanitas I/Adreno200-EGL﹕ <qeglDrvAPI_eglInitialize:269>: EGL 1.4 QUALCOMM build:  (CL2819715)
    Build Date: 01/15/13 Tue
    Local Branch: GK_LGE_AU_JB_2.2_RB2.04.01.02.17.065-rev002
    Remote Branch:
    Local Patches:
    Reconstruct Branch:
09-27 23:25:58.341    4453-4453/codename.humanitas I/Adreno200-C2D﹕ <c2d_wrapper_init:121>: C2D2 initializing a3xx version: libc2d2_a3xx.so
09-27 23:25:58.341    4453-4453/codename.humanitas I/Adreno200-C2D﹕ <c2d_wrapper_init:183>: C2D2 wrapper initialized successfully
09-27 23:25:58.341    4453-4453/codename.humanitas I/Adreno200-C2D﹕ <c2d_cmd_res_init:104>: Allocate CMD Buffer Address  0x5d513000 0x1009a000
09-27 23:25:58.911    4453-4453/codename.humanitas D/skia﹕ onFlyCompress
09-27 23:25:58.952    4453-4453/codename.humanitas W/System.err﹕ java.io.IOException: open failed: ENOENT (No such file or directory)
09-27 23:25:58.952    4453-4453/codename.humanitas W/System.err﹕ at java.io.File.createNewFile(File.java:940)
09-27 23:25:58.952    4453-4453/codename.humanitas W/System.err﹕ at codename.humanitas.Preview$1.SaveBitmapToFileCache(MainActivity.java:116)
09-27 23:25:58.952    4453-4453/codename.humanitas W/System.err﹕ at codename.humanitas.Preview$1.onPreviewFrame(MainActivity.java:104)
09-27 23:25:58.952    4453-4453/codename.humanitas W/System.err﹕ at android.hardware.Camera$EventHandler.handleMessage(Camera.java:815)
09-27 23:25:58.952    4453-4453/codename.humanitas W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:99)
09-27 23:25:58.952    4453-4453/codename.humanitas W/System.err﹕ at android.os.Looper.loop(Looper.java:137)
09-27 23:25:58.952    4453-4453/codename.humanitas W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:4885)
09-27 23:25:58.962    4453-4453/codename.humanitas W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
09-27 23:25:58.962    4453-4453/codename.humanitas W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:511)
09-27 23:25:58.962    4453-4453/codename.humanitas W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
09-27 23:25:58.962    4453-4453/codename.humanitas W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
09-27 23:25:58.962    4453-4453/codename.humanitas W/System.err﹕ at dalvik.system.NativeStart.main(Native Method)
09-27 23:25:58.962    4453-4453/codename.humanitas W/System.err﹕ Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
09-27 23:25:58.962    4453-4453/codename.humanitas W/System.err﹕ at libcore.io.Posix.open(Native Method)
09-27 23:25:58.962    4453-4453/codename.humanitas W/System.err﹕ at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
09-27 23:25:58.962    4453-4453/codename.humanitas W/System.err﹕ at java.io.File.createNewFile(File.java:933)
09-27 23:25:58.962    4453-4453/codename.humanitas W/System.err﹕ ... 11 more
09-27 23:25:58.962    4453-4453/codename.humanitas W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x41d2c438)
09-27 23:25:58.962    4453-4453/codename.humanitas E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.NullPointerException
            at codename.humanitas.Preview$1.SaveBitmapToFileCache(MainActivity.java:131)
            at codename.humanitas.Preview$1.onPreviewFrame(MainActivity.java:104)
            at android.hardware.Camera$EventHandler.handleMessage(Camera.java:815)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4885)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
            at dalvik.system.NativeStart.main(Native Method)

1개의 답변

0 추천

에러는 bitmap이 않만들어졌다(NullPointerException)는 것 같은데 비트맵을 만드는 과정에서 어떤 조건이 만족되지 않아 bitmap이 NULL상태인것 같습니다.

 

http://blog.naver.com/ambidext/220417848788

여기 한번 참조해보세요.

 

컴러기 (22,230 포인트) 님이 2015년 9월 30일 답변
...