我怎样才能用自定义相机拍照并显示在另一个 activity 上?
How can i take a picture with custom camera and display it on another activity?
请帮助我如何从自定义相机拍摄照片并在另一个相机上显示它activity,请给我更详细的答案,我应该放什么代码,放在哪里,请告诉我是哪种我应该创建变量、int、字符串、布尔值,
这是我的代码:
主要Activity:
@Override
public void onPictureTaken(byte[] data, Camera camera) {
final Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
// Store bitmap to local storage
FileOutputStream out = null;
try {
// Prepare file path to store bitmap
// This will create Pictures/MY_APP_NAME_DIR/
File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), "MY_APP_NAME_DIR");
if (!mediaStorageDir.exists()) {
if (!mediaStorageDir.mkdirs()) {
Log.d(Constants.LOG_TAG, "failed to create directory");
return null;
}
}
// Bitmap will be stored at /Pictures/MY_APP_NAME_DIR/YOUR_FILE_NAME.jpg
String filePath = mediaStorageDir.getPath() + File.separator + "YOUR_FILE_NAME.jpg";
out = new FileOutputStream(filePath);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (out != null) {
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
您可以使用接口将 YOUR_FILE_PATH 从 CameraPreview class 传递到 MainActivity class。
然后在 MainActivity.java
Intent i = new Intent(this, EditPicture.class);
i.putExtra("FILE_PATH", YOUR_FILE_PATH);
startActivity(i);
在 EditPicture 中 activity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getIntent().hasExtra("FILE_PATH")) {
String filePath = getIntent().getStringExtra("FILE_PATH");
// Read bitmap from local file
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap bitmap = BitmapFactory.decodeFile(filePath, options);
yourImageView.setImageBitmap(bitmap);
}
}
最后,将 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
添加到您的 AndroidManifest.xml 以允许您的应用写入外部存储。
这是位图写入外存的例子。如果要存储到缓存或其他选项等内部存储,请参考http://developer.android.com/guide/topics/data/data-storage.html#filesInternal
如果您需要我详细说明,请告诉我。
请帮助我如何从自定义相机拍摄照片并在另一个相机上显示它activity,请给我更详细的答案,我应该放什么代码,放在哪里,请告诉我是哪种我应该创建变量、int、字符串、布尔值,
这是我的代码:
主要Activity:
@Override
public void onPictureTaken(byte[] data, Camera camera) {
final Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
// Store bitmap to local storage
FileOutputStream out = null;
try {
// Prepare file path to store bitmap
// This will create Pictures/MY_APP_NAME_DIR/
File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), "MY_APP_NAME_DIR");
if (!mediaStorageDir.exists()) {
if (!mediaStorageDir.mkdirs()) {
Log.d(Constants.LOG_TAG, "failed to create directory");
return null;
}
}
// Bitmap will be stored at /Pictures/MY_APP_NAME_DIR/YOUR_FILE_NAME.jpg
String filePath = mediaStorageDir.getPath() + File.separator + "YOUR_FILE_NAME.jpg";
out = new FileOutputStream(filePath);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (out != null) {
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
您可以使用接口将 YOUR_FILE_PATH 从 CameraPreview class 传递到 MainActivity class。 然后在 MainActivity.java
Intent i = new Intent(this, EditPicture.class);
i.putExtra("FILE_PATH", YOUR_FILE_PATH);
startActivity(i);
在 EditPicture 中 activity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getIntent().hasExtra("FILE_PATH")) {
String filePath = getIntent().getStringExtra("FILE_PATH");
// Read bitmap from local file
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap bitmap = BitmapFactory.decodeFile(filePath, options);
yourImageView.setImageBitmap(bitmap);
}
}
最后,将 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
添加到您的 AndroidManifest.xml 以允许您的应用写入外部存储。
这是位图写入外存的例子。如果要存储到缓存或其他选项等内部存储,请参考http://developer.android.com/guide/topics/data/data-storage.html#filesInternal
如果您需要我详细说明,请告诉我。