Java 安卓:如何设置imageview和通过定制相机拍摄的照片
我有一个自定义的摄像头应用程序,当我按下“捕获”按钮时,捕获的图像将作为预览图像出现在下一个活动中 我就这么走了- MainActivity.javaJava 安卓:如何设置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
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!非常感谢。顺便问一下,很抱歉打扰您,您知道在视图上添加组件后如何从视图中检索图像吗?这是链接-