0

自分だけのカメラアプリを作りたかった。メインアクティビティにはボタンがあり、クリックするとカメラアクティビティに移動します(プレビューと「撮影」ボタンがあります)。「撮る」ボタンを押すと写真が撮られます。撮影した写真はメインアクティビティに戻り、画像ビューに表示されます。問題は、カメラアクティビティからメインアクティビティに写真を戻す方法がわからないことです。誰かがヒントや例を与えることができるといいのですが?

4

4 に答える 4

0

パスを使用してインテントをカメラ画面に送信します。画像はキャプチャされ、そのパスに保存されます。

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
           if (!APP_FILE_PATH_Media.exists()) 
          {
               APP_FILE_PATH_Media.mkdirs();
          }
         uriSavedImage =new File(APP_FILE_PATH_Media+ "/" +
                    "IMG_"+ getTimeStamp() + ".jpeg");
       cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(uriSavedImage));
       startActivityForResult(cameraIntent, CAMERA_REQUEST); 

take をクリックすると、メイン アクティビティの onActivityResult メソッドが呼び出されます。OnActivityResult で:

path=uriSavedImage.getAbsolutePath();

このパスを使用して画像を表示できます。

于 2013-01-16T12:32:54.763 に答える
0

こんにちは、このコードを試してみてください。

package com.example.stackoverflow;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.math.BigInteger;
import java.security.SecureRandom;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.Toast;

public class MyCameraActivity extends Activity {
    private static final int CAMERA_REQUEST = 1888; 



    static String str_Camera_Photo_ImagePath = "";
    private static File f;
    private static int Take_Photo = 2;
    private static String str_randomnumber = "";
    static String str_Camera_Photo_ImageName = "";
    public static String str_SaveFolderName;
    private static File wallpaperDirectory;
    Bitmap bitmap;
    int storeposition = 0;
    public static GridView gridview;
    public static ImageView imageView;



    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ccccc);
        this.imageView = (ImageView)this.findViewById(R.id.imageView1);
        Button photoButton = (Button) this.findViewById(R.id.button1);
        photoButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                str_SaveFolderName = Environment
                        .getExternalStorageDirectory()
                        .getAbsolutePath()
                        + "/rajeshsample";
                str_randomnumber = String.valueOf(nextSessionId());
                wallpaperDirectory = new File(str_SaveFolderName);
                if (!wallpaperDirectory.exists())
                    wallpaperDirectory.mkdirs();
                str_Camera_Photo_ImageName = str_randomnumber
                        + ".jpg";
                str_Camera_Photo_ImagePath = str_SaveFolderName
                        + "/" + str_randomnumber + ".jpg";
                System.err.println(" str_Camera_Photo_ImagePath  "
                        + str_Camera_Photo_ImagePath);
                f = new File(str_Camera_Photo_ImagePath);
                startActivityForResult(new Intent(
                        MediaStore.ACTION_IMAGE_CAPTURE).putExtra(
                        MediaStore.EXTRA_OUTPUT, Uri.fromFile(f)),
                        Take_Photo);
                System.err.println("f  " + f);
            }
        });
    }


    // used to create randon numbers
    public String nextSessionId() {
        SecureRandom random = new SecureRandom();
        return new BigInteger(130, random).toString(32);
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub
        if (event.getAction() == KeyEvent.ACTION_DOWN) {
            switch (keyCode) {
            case KeyEvent.KEYCODE_HOME:
                finish();
                Toast.makeText(getApplicationContext(), "TTTTTTTTTTTT", Toast.LENGTH_LONG).show();
                return true;
            }
        }

        return super.onKeyDown(keyCode, event);
    }

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
        if (requestCode == Take_Photo) {
            String filePath = null;

            filePath = str_Camera_Photo_ImagePath;
            if (filePath != null) {
                Bitmap faceView = ( new_decode(new File(
                                filePath))); // ========================> good
                                                // lines



                imageView.setImageBitmap(faceView);

            } else {
                bitmap = null;
            }
        }
    } 

    public static Bitmap new_decode(File f) {

        // decode image size

        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true;
        o.inDither = false; // Disable Dithering mode

        o.inPurgeable = true; // Tell to gc that whether it needs free memory,
                                // the Bitmap can be cleared

        o.inInputShareable = true; // Which kind of reference will be used to
                                    // recover the Bitmap data after being
                                    // clear, when it will be used in the future
        try {
            BitmapFactory.decodeStream(new FileInputStream(f), null, o);
        } catch (FileNotFoundException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        // Find the correct scale value. It should be the power of 2.
        final int REQUIRED_SIZE = 300;
        int width_tmp = o.outWidth, height_tmp = o.outHeight;
        int scale = 1;
        while (true) {
            if (width_tmp / 1.5 < REQUIRED_SIZE && height_tmp / 1.5 < REQUIRED_SIZE)
                break;
            width_tmp /= 1.5;
            height_tmp /= 1.5;
            scale *= 1.5;
        }

        // decode with inSampleSize
        BitmapFactory.Options o2 = new BitmapFactory.Options();
        // o2.inSampleSize=scale;
        o.inDither = false; // Disable Dithering mode

        o.inPurgeable = true; // Tell to gc that whether it needs free memory,
                                // the Bitmap can be cleared

        o.inInputShareable = true; // Which kind of reference will be used to
                                    // recover the Bitmap data after being
                                    // clear, when it will be used in the future
        // return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
        try {

//          return BitmapFactory.decodeStream(new FileInputStream(f), null,
//                  null);
            Bitmap bitmap= BitmapFactory.decodeStream(new FileInputStream(f), null, null);
            System.out.println(" IW " + width_tmp);
            System.out.println("IHH " + height_tmp);           
               int iW = width_tmp;
                int iH = height_tmp;

               return Bitmap.createScaledBitmap(bitmap, iW, iH, true);

        } catch (OutOfMemoryError e) {
            // TODO: handle exception
            e.printStackTrace();
            // clearCache();

            // System.out.println("bitmap creating success");
            System.gc();
            return null;
            // System.runFinalization();
            // Runtime.getRuntime().gc();
            // System.gc();
            // decodeFile(f);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        }

    }

}
于 2013-01-16T13:29:48.237 に答える
0

それはそう!でカメラインテントを送信する必要がstartActivityForResultあります。以下のコードを見てください。

イメージを保存するパスを定義します。

 String filepath = Environment.getExternalStorageDirectory()+"/foldername/"+filename;
 File file = new File(_path);
Uri outputFileUri = Uri.fromFile(file);

カメラの意図

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
            startActivityForResult(intent, 1212);

startActivityForResult をオーバーライドする

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

            if (requestCode == 1212) {
            //here you can decode your path and use for displaying an image. 
        }
    }
于 2013-01-16T12:40:41.153 に答える
0

ボタンクリックイベントで次のコードを使用します

    Intent action = new Intent("android.media.action.IMAGE_CAPTURE");
 action.putExtra(MediaStore.EXTRA_OUTPUT,MediaStore.Images.Media.EXTERNAL_CONTENT_URI.toString());
startActivityForResult(action,TAKE_PICTURE_FROM_CAMERA);

使用する必要があります

public void onActivityResult(int reqCode, int resultCode, Intent data) {
    super.onActivityResult(reqCode, resultCode, data);

}

if (resultCode == Activity.RESULT_OK) {
                uri = data.getData();
                try {
                    photoBitMap = (Bitmap) data.getExtras().get("data");
                    int h = 100; // height in pixels
                    int w = 100; // width in pixels
                    photoBitMap = Bitmap.createScaledBitmap(photoBitMap, h, w,
                            true);

                    uri = Uri.parse(android.provider.MediaStore.Images.Media
                            .insertImage(getContentResolver(), photoBitMap,
                                    null, null));
                    Bitmap usableBMP = Bitmap.createScaledBitmap(photoBitMap,
                            68, 80, true);

                    if (!Calculations.encodeImageToBase64(photoBitMap).equals(
                            "")
                            && Calculations.encodeImageToBase64(photoBitMap) != null) {
                        // userPhoto.setImageBitmap(usableBMP);
                        userPhoto.setImageBitmap(Calculations
                                .getRoundedCornerBitmap(this, usableBMP));

                    } else {
                        userPhoto.setImageBitmap(null);
                        userPhoto.setImageResource(R.drawable.default_user_img);
                        Toast.makeText(RegisterActivity.this,
                                getString(R.string.imageSizeValidation),
                                Toast.LENGTH_SHORT).show();
                    }
                    userPhoto.setScaleType(ScaleType.FIT_XY);
                } catch (Exception e) {
                    e.printStackTrace();
                } catch (OutOfMemoryError e) {
                    e.printStackTrace();
                    Toast.makeText(RegisterActivity.this,
                            getString(R.string.imageSizeValidation),
                            Toast.LENGTH_SHORT).show();
                }
            }
于 2013-01-16T13:41:21.827 に答える