Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 安卓:如何设置imageview和通过定制相机拍摄的照片_Java_Android_Image_Camera - Fatal编程技术网

Java 安卓:如何设置imageview和通过定制相机拍摄的照片

Java 安卓:如何设置imageview和通过定制相机拍摄的照片,java,android,image,camera,Java,Android,Image,Camera,我有一个自定义的摄像头应用程序,当我按下“捕获”按钮时,捕获的图像将作为预览图像出现在下一个活动中 我就这么走了- MainActivity.java public class MainActivity extends Activity { private Camera mCamera; private CameraPreview mCameraPreview; private File pictureFile; /** Called when the activity is first cr

我有一个自定义的摄像头应用程序,当我按下“捕获”按钮时,捕获的图像将作为预览图像出现在下一个活动中

我就这么走了-

MainActivity.java

public class MainActivity extends Activity {
private Camera mCamera;
private CameraPreview mCameraPreview;
private File pictureFile;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    mCamera = getCameraInstance();
    mCameraPreview = new CameraPreview(this, mCamera);
    FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
    final ImageView view = (ImageView) findViewById(R.id.imageView1);
    preview.addView(mCameraPreview);

    Button captureButton = (Button) findViewById(R.id.button_capture);
    captureButton.setOnClickListener(new View.OnClickListener() {
        @SuppressLint("NewApi")
        @Override
        public void onClick(View v) {
            mCamera.takePicture(null, null, mPicture);

        }
    });
}

/**
 * Helper method to access the camera returns null if it cannot get the
 * camera or does not exist
 * 
 * @return
 */
private Camera getCameraInstance() {
    Camera camera = null;
    try {
        camera = Camera.open();
    } catch (Exception e) {
        // cannot get camera or does not exist
    }
    return camera;
}

PictureCallback mPicture = new PictureCallback() {
    @Override
    public void onPictureTaken(byte[] data, Camera camera) {
        pictureFile = getOutputMediaFile();
        if (pictureFile == null) {
            return;
        }
        try {
            FileOutputStream fos = new FileOutputStream(pictureFile);
            fos.write(data);
            fos.close();
        } catch (FileNotFoundException e) {

        } catch (IOException e) {
        }
    }
};

private static File getOutputMediaFile() {
    File mediaStorageDir = new File(
            Environment
                    .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
            "MyCameraApp");
    if (!mediaStorageDir.exists()) {
        if (!mediaStorageDir.mkdirs()) {
            Log.d("MyCameraApp", "failed to create directory");
            return null;
        }
    }
    // Create a media file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss")
            .format(new Date());
    File mediaFile;
    mediaFile = new File(mediaStorageDir.getPath() + File.separator
            + "IMG_" + timeStamp + ".jpg");

    return mediaFile;
}
my CameraPreview.java

public class CameraPreview extends SurfaceView implements
SurfaceHolder.Callback {
 private SurfaceHolder mSurfaceHolder;
 private Camera mCamera;

 // Constructor that obtains context and camera
 @SuppressWarnings("deprecation")
 public CameraPreview(Context context, Camera camera) {
 super(context);
 this.mCamera = camera;
 this.mSurfaceHolder = this.getHolder();
 this.mSurfaceHolder.addCallback(this);
 this.mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
 }

 @Override
 public void surfaceCreated(SurfaceHolder surfaceHolder) {
 try {
mCamera.setDisplayOrientation(90);
    mCamera.setPreviewDisplay(surfaceHolder);
    mCamera.startPreview();
  } catch (IOException e) {

   }
   }

   @Override
    public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
    mCamera.stopPreview();
    mCamera.release();
 }

   @Override
    public void surfaceChanged(SurfaceHolder surfaceHolder, int format,
     int width, int height) {

     try {
     mCamera.setPreviewDisplay(surfaceHolder);
     mCamera.startPreview();
     } catch (Exception e) {
     // intentionally left blank for a test
     }
     }
      }
My activity_main.xml文件

<?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/container"
android:orientation="vertical" >

 <FrameLayout
    android:id="@+id/Frame"
    android:layout_width="fill_parent"
    android:layout_height="200dp"
    android:layout_weight="1" >

     <ImageView
         android:id="@+id/imageView1"
         android:layout_width="100dp"
         android:layout_height="100dp"
         android:layout_gravity="center"
         android:src="@drawable/ic_launcher" />

 </FrameLayout>
<FrameLayout
    android:id="@+id/camera_preview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_weight="1" />

<Button
    android:id="@+id/button_capture"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:text="Capture" />
到目前为止,我已经尝试使用mPicture甚至转换pictureFile来设置我的一个Imageview、view的后台资源,但没有效果。但是,预览图像将显示在camerapreview上


有没有经验丰富的程序员知道如何处理这个问题?谢谢

我认为您可以使用startActivityForResult。。这段视频可能会有帮助


注:第42集将持续拍摄

我只在onPictureTaken回调中添加了几行:

public void onPictureTaken(byte[] data, Camera camera) {
    pictureFile = getOutputMediaFile();
    if (pictureFile == null) {
        return;
    }
    try {
        FileOutputStream fos = new FileOutputStream(pictureFile);
        fos.write(data);
        fos.close();
// ---- added to display imageView ---- 
        BitmapFactory.Options scalingOptions = new BitmapFactory.Options();
        scalingOptions.inSampleSize = camera.getParameters().getPictureSize().width / imageView.getMeasuredWidth();
        final Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length, scalingOptions);
        imageView.setImageBitmap(bmp);
        imageView.setVisibility(ImageView.VISIBLE);
// ---- end of changes to display imageView ---- 
    } catch (FileNotFoundException e) {

    } catch (IOException e) {
    }
}

对不起,添加的部分是如何工作的?esp此imageView.setImageBitmapbmp;imageView.setVisibilityImageView.VISIBLE;这有什么问题?您可能会设置MainActivity类的私有字段,并在setContentView之后对其进行初始化。但是您也可以在onPictureTaken.right中写入final ImageView=ImageView findViewByIdR.id.imageView1!非常感谢。顺便问一下,很抱歉打扰您,您知道在视图上添加组件后如何从视图中检索图像吗?这是链接-