私のアプリでは、ユーザーに写真を撮るか、ライブラリから編集する写真を選択してもらいたいと思います。
私の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);
今のImageView
ところ、 を使って画像を表示するだけですが、ユーザーが画像のステッカーを貼りたい場所をタッチして、編集した画像を元の画像に重ねて保存できるようにしたいと考えています。現在、元の画像をEditingActivity
ビットマップとしてフルスクリーンで表示することはできません。
私はAndroidにかなり慣れていないので、ここで多くの同様の質問をチェックしましたが、ほとんど私の解決策のようですが、完全ではありません.
一言で言えば私の質問:
URI からビットマップを取得するにはどうすればよいですか? 実際に上記のコードからビットマップを取得している場合、描画されないのはなぜonDraw()
ですか (キャンバスを使用するにはメソッドをオーバーライドする必要があります)。また、元の画像にステッカーを貼れるようになったら、新しい画像 (ステッカー付き) をデバイスに保存するにはどうすればよいですか?