在我的应用中,我想让用户拍照或从图库中选择要编辑的图片。
我的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传递给我的下一个Activity
,让用户可以选择贴在选定图片上的贴纸。从那里,URI再次传递给EditingActivity
。
这就是我onCreate()
的{{1}}方法:
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);
显示了图片,但是我希望用户能够触摸到图片上贴纸的位置,并保存已编辑的图片原始图片。现在我无法将ImageView
中的原始图片全屏显示为位图。
我对Android很新,我在这里检查了许多类似的问题,这些问题似乎几乎是我的解决方案,但并不完全。
我的问题简而言之:
如何从URI获取位图?如果我实际上从上面的代码中获取了一个Bitmap,为什么不绘制(我是否必须覆盖EditingActivity
方法才能使用画布)?此外,当我到达可以在原始图片上贴标签的位置时,如何将新图像(带贴纸)保存到设备中?
答案 0 :(得分:0)
尝试以下代码
Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri);
修改强>
要获取URI
,请使用以下代码。
Uri path = data.getExtras().get("data");