2

ボタンをクリックするだけでカメラを開くアプリがあります。その後、ユーザーはキャンセル/保存オプションにつながる標準のカメラアプリで写真を撮ることができます。キャンセルした場合は、再度撮影できます。[保存]オプションを選択すると、画像がギャラリーに保存されます。どちらかがクリックされる前に、このキャンセル/保存モードで画像にいくつかのものを追加したいと思います。

これを行う最良の方法は、写真をアプリに取り込み、そこで変更を加えてボタンで保存することだと思います。私はこれを行う方法がわかりません。onActivityResult関数を使用する必要があることはわかっていますが、それだけです。

アドバイスをいただければ幸いです。

4

1 に答える 1

2

ユーザーが写真を撮れるようにIMAGE_CAPTUREインテントを起動するときは、画像を保存するパスをパラメーターとして渡す必要があります。まず、撮影した写真のパスを保存する必要があります。次に、ユーザーがアクティビティに戻ったら、ビットマップを管理し、他の要素と組み合わせます。

  camera.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                    String storageState = Environment.getExternalStorageState();
                    if (storageState.equals(Environment.MEDIA_MOUNTED)) {
                        long time = System.currentTimeMillis();

                        File root = Environment
                                .getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);

                        File dir = new File(root.getAbsolutePath() + "/Camera");
                        if (dir.exists() == false) {
                            dir.mkdirs();
                        }

                        String path = dir.getAbsolutePath() + File.separatorChar
                                + time + ".jpg";
                        filesaved = new File(path);
                        try {
                            if (filesaved.exists() == false) {
                                filesaved.getParentFile().mkdirs();
                                filesaved.createNewFile();
                            }

                        } catch (IOException e) {
                            Toast.makeText(
                                    context,
                                    "Unable to create external file"
                                            + storageState, Toast.LENGTH_LONG).show();
                            return;
                        }


                        uritopass = Uri.fromFile(filesaved);
                        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                        intent.putExtra(MediaStore.EXTRA_OUTPUT, uritopass);
                        startActivityForResult(intent, TAKE_PICTURE);
                    } else {
                        Toast.makeText(
                                context,
                                "External Storeage (SD Card) is required.\n\nCurrent state: "
                                        + storageState, Toast.LENGTH_LONG).show();

                    }
                }

            });

    ...
@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == Activity.RESULT_OK) {
            if (requestCode == TAKE_PICTURE) {
                //user took a photo
                File imageFile = new File(filesaved.toString());
                Bitmap bm = decodeFile(imageFile);
                if (bm != null) {
                    bm = combineImages(bm);
                    img.setImageBitmap(bm);
                }
            }
        }
}

...

decodefile元のファイルからビットマップをロードする方法ここに。

combineImagesここで2つ以上のビットマップを組み合わせる方法。

于 2013-01-28T19:21:26.430 に答える