[英]Take a photo with Camera but don't save it as a file, only show it
在我的Android項目中,我想用Camera拍照, 但不要將其另存為文件,而只能在ImageView上以可繪制或其他形式顯示。
在我的項目中,可以看到相機,如下面的代碼所示。
我嘗試了很多方法,但是如果不保存SDCard卡就無法拍照。
public class ShowCamera extends SurfaceView implements SurfaceHolder.Callback {
private SurfaceHolder holdMe;
private Camera theCamera;
public ShowCamera(Context context, Camera camera) {
super(context);
theCamera = camera;
holdMe = getHolder();
holdMe.addCallback(this);
}
@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
theCamera.setPreviewDisplay(holder);
theCamera.startPreview();
} catch (IOException e) {
}
}
@Override
public void surfaceDestroyed(SurfaceHolder arg0) {
}
}
public class MainActivity extends Activity {
private Camera cameraObject;
private ShowCamera showCamera;
public static Camera isCameraAvailiable(){
Camera object = null;
try {
object = Camera.open();
}
catch (Exception e){
}
return object;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_index);
cameraObject = isCameraAvailiable();
showCamera = new ShowCamera(this, cameraObject);
final FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
preview.addView(showCamera);
}
謝謝!
首先,不要忘記將其放在您的AndroidManifest.xml中: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
因此,您可以按照以下示例操作: http : //hmkcode.com/android-camera-taking-photos-camera/
您需要在您的按鈕單擊例程中包括以下行:
mCamera.takePicture(null,null,mPicture);
然后創建一個例程:
private PictureCallback mPicture = new PictureCallback(){ //+ a lot of things...}
下面的代碼應該在PictureCallBack例程中
public void onPictureTaken(byte[] data, Camera camera){
File pictureFile = getOutputMediaFile(MEDIA_TYPE_IMAGE);
try{
FileOutputStream fos = new FileOutputStream(pictureFile);
fos.write(data);
fos.close();
}
catch(FileNotFoundException e){}
catch(IOException e){}
File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), "MyCameraApp");
}
並嘗試找到該功能:
private static File getOutputMediaFile(int type){}
那也應該包括在內!
因此,您需要從相機拍攝的圖像並將其顯示在ImageView
, 而不是保存它?
創建圖片回調以接收來自相機的數據並將其解碼為Bitmap:
private PictureCallback mPicture = new PictureCallback() {
@Override
public void onPictureTaken(final byte[] data, Camera c) {
Bitmap bm = BitmapFactory.decodeByteArray(data, 0, data.length);
yourImageView.setImageBitmap(bm);
}
};
呼叫攝像機捕獲(單擊捕獲按鈕時):
try {
mCamera.takePicture(null, null, mPicture);
} catch (Exception e) {
// take picture failed
e.printStackTrace();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.