在我的应用程序中,我想让用户拍照或从他们的图书馆中选择要编辑的图片。
我的MainActivity
:
public void openCamera(View view)
{
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);
}
public void openLibrary(View view)
{
Intent photoPickerIntent = new Intent(Intent.ACTION_GET_CONTENT);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, LIBRARY_PIC_REQUEST);
}
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
Uri path = data.getData();
Intent intent = new Intent(this, StickerActivity.class);
intent.putExtra(EXTRA_MESSAGE, path);
startActivity(intent);
}
我将 URI 传递给我的 next Activity
,它允许用户选择一个贴纸以贴在所选图片上。从那里,URI 再次传递给EditingActivity
.
这就是我的onCreate()
方法EditingActivity
:
Bundle retrievedExtras = getIntent().getExtras();
int stickerType = retrievedExtras.getInt(StickerActivity.SELECTED_MESSAGE);
Uri picturePath = retrievedExtras.getParcelable(MainActivity.EXTRA_MESSAGE);
paint = new Paint();
boolean isPortrait = getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT;
int frameBufferWidth = isPortrait ? 800 : 1280;
int frameBufferHeight = isPortrait ? 1280 : 800;
Bitmap frameBuffer = Bitmap.createBitmap(frameBufferWidth,
frameBufferHeight, Config.RGB_565);
try
{
chosenPicture = Media.getBitmap(this.getContentResolver(), picturePath);
} catch (FileNotFoundException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
}
canvas = new Canvas(frameBuffer);
canvas.drawBitmap(chosenPicture, 0, 0, paint);
现在,到目前为止,我只得到了使用 an 显示的图片ImageView
,但是我希望用户能够触摸他们想要在图片上贴标签的位置,并将编辑后的图片保存在原始图片上。EditingActivity
现在我无法让原始图片在我的位图中全屏显示。
我对 Android 还很陌生,我在这里检查了许多类似的问题,这些问题似乎几乎是我的解决方案,但不完全是。
简而言之,我的问题:
如何从 URI 中获取位图?如果我实际上是从上面的代码中获取位图,为什么它不绘制(我是否必须重写该onDraw()
方法才能使用画布)?另外,当我可以在原始图片上放置贴纸时,如何将新图像(带有贴纸)保存到设备中?