呼叫Android相機拍照,解決了拍照時候記憶體溢位溢位的問題
阿新 • • 發佈:2019-02-12
在別處上看到的文章,解決了我在開發中的拍照後記憶體溢位的問題,下面就是程式碼
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(); } } }