我在通过安卓相机拍照时遇到了一些问题。
主要目的是使用CameraControlView
预览相机并通过按钮拍照。
String fileName = Environment.getExternalStorageDirectory().getPath() + "/sample_picture.jpg";
Bitmap photo;
mOpenCvCameraView.takePicture(fileName);
//viewNavi.setDisplayedChild(viewNavi.indexOfChild(findViewById(R.id.image_view)));
viewNavi.showNext();
Bitmap newp =BitmapFactory.decodeFile(fileName);
if(newp==null)
return;
ImageView imgViewResult = (ImageView) findViewById(R.id.imgViewResult);
imgViewResult.setImageBitmap(newp);
CameraControlView.takePicture(fileLocation);
在那之后,我想在 imageView 上使用保存的图片,但我不能,因为保存图片进度尚未完成(由 运行OnPictureTaken
)。所以我想确定拍照过程是否完成。然后我在互联网上找到了一个有用的解释,即OnPictureTaken
进度是保存图片的负责方法:
public void onPictureTaken(byte[] data, Camera camera) {
Log.i(TAG, "Saving a bitmap to file");
// The camera preview was automatically stopped. Start it again.
mCamera.startPreview();
mCamera.setPreviewCallback(this);
// Write the image in a file (in jpeg format)
/*My code
ImageView imgResult = (ImageView) findViewById(R.id.imgViewResult);
Bitmap newp = BitmapFactory.decodeByteArray(data, 0, data.length);
imgResult.setImageBitmap(newp);
*/
try {
FileOutputStream fos = new FileOutputStream(mPictureFileName);
fos.write(data);
fos.close();
} catch (java.io.IOException e) {
Log.e("PictureDemo", "Exception in photoCallback", e);
}
isPictureTaken = true;
}
真正的问题是当我尝试添加此代码段时:
ImageView imgResult = (ImageView) findViewById(R.id.imgViewResult);
Bitmap newp = BitmapFactory.decodeByteArray(data, 0, data.length);
imgResult.setImageBitmap(newp);
进入onPictureTaken
如上图。我有一个NullPointerException
.
有没有一种方法只能将拍摄的照片拍成位图,并且以同步的方式(意味着我一直使用的方式不适合我的项目。当我想在 takePicture 之后设置 ImageBitmap 时。代码发送给我之前拍摄的 pic [因为我我正在使用相同的保存位置并覆盖图片]或null)
任何解释都会很棒。
谢谢你的时间。