我正在使用Mobile vision API的面部跟踪示例,我正试图通过点击屏幕拍照.首先,我想用按钮拍摄屏幕上的任何图片,我尝试了这个代码,但它失败了.我看一下条形码阅读器的例子,并且有tap方法,但我不能成功.我应该用这种情况采用什么方法?
pure FaceTracking github code
private voID takeImage() { camera.takePicture(null, null, new PictureCallback() { private file imagefile; @OverrIDe public voID onPictureTaken(byte[] data, Camera camera) { try { // convert byte array into bitmap Bitmap loadedImage = null; Bitmap rotatedBitmap = null; loadedImage = BitmapFactory.decodeByteArray(data, 0, data.length); // rotate Image Matrix rotateMatrix = new Matrix(); rotateMatrix.postRotate(rotation); rotatedBitmap = Bitmap.createBitmap(loadedImage, 0, 0, loadedImage.getWIDth(), loadedImage.getHeight(), rotateMatrix, false); String state = Environment.getExternalStorageState(); file folder = null; if (state.contains(Environment.MEDIA_MOUNTED)) { folder = new file(Environment .getExternalStorageDirectory() + "/Demo"); } else { folder = new file(Environment .getExternalStorageDirectory() + "/Demo"); } boolean success = true; if (!folder.exists()) { success = folder.mkdirs(); } if (success) { java.util.Date date = new java.util.Date(); imagefile = new file(folder.getabsolutePath() + file.separator + new Timestamp(date.getTime()).toString() + "Image.jpg"); imagefile.createNewfile(); } else { Toast.makeText(getBaseContext(), "Image Not saved", Toast.LENGTH_SHORT).show(); return; } ByteArrayOutputStream ostream = new ByteArrayOutputStream(); // save image into gallery rotatedBitmap.compress(CompressFormat.JPEG, 100, ostream); fileOutputStream fout = new fileOutputStream(imagefile); fout.write(ostream.toByteArray()); fout.close(); ContentValues values = new ContentValues(); values.put(Images.Media.DATE_TAKEN, System.currentTimeMillis()); values.put(Images.Media.MIME_TYPE, "image/jpeg"); values.put(MediaStore.MediaColumns.DATA, imagefile.getabsolutePath()); CameraDemoActivity.this.getContentResolver().insert( Images.Media.EXTERNAL_CONTENT_URI, values); } catch (Exception e) { e.printstacktrace(); } } });}@OverrIDepublic voID onClick(VIEw v) { case R.ID.captureImage: takeImage(); break; default: break; }}
解决方法:
我解决了这个问题.
findVIEwByID(R.ID.capture).setonClickListener(new VIEw.OnClickListener() { @OverrIDe public voID onClick(VIEw v) { mCameraSource.takePicture(null, new CameraSource.PictureCallback() { private file imagefile; @OverrIDe public voID onPictureTaken(byte[] bytes) { try { // convert byte array into bitmap Bitmap loadedImage = null; Bitmap rotatedBitmap = null; loadedImage = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); Matrix rotateMatrix = new Matrix(); rotateMatrix.postRotate(rotation); rotatedBitmap = Bitmap.createBitmap(loadedImage, 0, 0, loadedImage.getWIDth(), loadedImage.getHeight(), rotateMatrix, false); dir = new file( Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES), "MyPhotos"); boolean success = true; if (!dir.exists()) { success = dir.mkdirs(); } if (success) { java.util.Date date = new java.util.Date(); imagefile = new file(dir.getabsolutePath() + file.separator + new Timestamp(date.getTime()).toString() + "Image.jpg"); imagefile.createNewfile(); } else { Toast.makeText(getBaseContext(), "Image Not saved", Toast.LENGTH_SHORT).show(); return; } ByteArrayOutputStream ostream = new ByteArrayOutputStream(); // save image into gallery rotatedBitmap.compress(CompressFormat.JPEG, 100, ostream); fileOutputStream fout = new fileOutputStream(imagefile); fout.write(ostream.toByteArray()); fout.close(); ContentValues values = new ContentValues(); values.put(Images.Media.DATE_TAKEN, System.currentTimeMillis()); values.put(Images.Media.MIME_TYPE, "image/jpeg"); values.put(MediaStore.MediaColumns.DATA, imagefile.getabsolutePath()); FaceTrackerActivity.this.getContentResolver().insert( Images.Media.EXTERNAL_CONTENT_URI, values); //savetoInternalStorage(loadedImage); } catch (Exception e) { e.printstacktrace(); } } }); } });
总结 以上是内存溢出为你收集整理的android – 移动视觉api – 面部跟踪时如何捕获图片全部内容,希望文章能够帮你解决android – 移动视觉api – 面部跟踪时如何捕获图片所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)