1. 程式人生 > >呼叫Android相機拍照,解決了拍照時候記憶體溢位溢位的問題

呼叫Android相機拍照,解決了拍照時候記憶體溢位溢位的問題

在別處上看到的文章,解決了我在開發中的拍照後記憶體溢位的問題,下面就是程式碼

private static int CARMER_REQUEST_CODE = 1;
    private String filedirName = "sencondIDCard";
    private String picFileName = "";
    private File picFile = null;
    Uri imgUri = null;
    OcrEngine oe;
    IDCard ic;

private void startCarmer() {

        File dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), "sencondIDCard");
        if(!dir.exists()){
            dir.mkdirs();
        }

        Date date = null; 
        SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");// 獲取當前時間,進一步轉化為字串 
        date = new Date(); 
        picFileName = format.format(date) + ".jpg"; 
        picFile = new File(dir,picFileName);
        Uri u=Uri.fromFile(picFile); 
        Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

        camera.putExtra(MediaStore.Images.Media.ORIENTATION, 0); 
        camera.putExtra(MediaStore.EXTRA_OUTPUT, u); 

        startActivityForResult(camera, CARMER_REQUEST_CODE);

    }

/** 
     * @param 將圖片內容解析成位元組陣列 
     * @param inStream 
     * @return byte[] 
     * @throws Exception 
     */  
    public   byte[] readStream(InputStream inStream) throws Exception {  
        byte[] buffer = new byte[1024];  
        int len = -1;  
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();  
        while ((len = inStream.read(buffer)) != -1) {  
            outStream.write(buffer, 0, len);  
        }  
        byte[] data = outStream.toByteArray();  
        outStream.close();  
        inStream.close();  
        return data;  

    }  


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == CARMER_REQUEST_CODE  ) {
            try {
                imgUri =   Uri.parse(android.provider.MediaStore.Images.Media.insertImage(getContentResolver(),   picFile.getAbsolutePath(), null, null));
                //u就是拍攝獲得的原始圖片的uri,剩下的你想幹神馬壞事請便…… 
                ContentResolver cr = getContentResolver();
                InputStream imgIS = imgIS = cr.openInputStream(imgUri);
//              ic = oe.recognize(MainActivity.this, picFile.getAbsolutePath());
                ic = oe.recognize(MainActivity.this, readStream(imgIS));
                String cn = ic.getCardNo();
                String bt = ic.getBirth();
                if(cn != null){
                    System.out.println("cn--->" + cn);
                }else{
                    System.out.println("cn---> cn is null" );
                }
                System.out.println("--->" );
            } catch ( Exception e) {
                e.printStackTrace();
            } 

        }
    }