1

私のアプリでは、ユーザーは画像ギャラリーから画像を選択するか、カメラで画像をキャプチャします。

キャプチャすると、ユーザーのギャラリーに追加されます。

同じ画像であることに加えて、画像のサイズが大幅に変更されていることがわかりました。

キャプチャ: 33kb

コード:

    if (requestCode == TAKEIMAGE) {
        System.out.println("TAKE IMAGE");
        int photoLength = 0;
        Bitmap photo = (Bitmap) data.getExtras().get("data"); 
        photoLength = GetBitmapLength(photo);

        SetSubmissionImage(photo, photoLength);
    }  

ギャラリーからの引用: 1600kb

コード:

    else if (requestCode == CHOOSEIMAGE) {
        System.out.println("CHOOSE IMAGE");

        Uri selectedImageUri = data.getData();
        selectedImagePath = getPath(selectedImageUri);
        try {
            FileInputStream fileis=new FileInputStream(selectedImagePath);
            BufferedInputStream bufferedstream=new BufferedInputStream(fileis);
            byte[] bMapArray= new byte[bufferedstream.available()];
            bufferedstream.read(bMapArray);

            int photoLength = 0;
            Bitmap photo = BitmapFactory.decodeByteArray(bMapArray, 0, bMapArray.length);

            bMapArray = null;
            fileis.close();
            bufferedstream.close();



            //rotate to be portrait properly
            try {
                ExifInterface exif = new ExifInterface(selectedImagePath);
                int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, 1);
                Log.e("EXIF", "Exif: " + orientation);
                Matrix matrix = new Matrix();
                if (orientation == 6) {
                    matrix.postRotate(90);
                }
                else if (orientation == 3) {
                    matrix.postRotate(180);
                }
                else if (orientation == 8) {
                    matrix.postRotate(270);
                }
                photo = Bitmap.createBitmap(photo, 0, 0, photo.getWidth(), photo.getHeight(), matrix, true); // rotating bitmap
            }
            catch (Exception e) {

            }

            //photo = GetCompressedBitmap(photo);
            photoLength = GetBitmapLength(photo);
            SetSubmissionImage(photo, photoLength);

        } 
4

1 に答える 1

1

コメントで他の人が言ったように、画像が保存されるURIを含むインテントでカメラアクティビティを開始する必要があります:

// create Intent to take a picture and return control to the calling application
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); // create a file to save the image
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name

// start the image capture Intent
startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);

次に、 onActivityResult() メソッドで、URI を取得し、インテントの URI から画像をロードできます。

于 2013-04-03T08:42:15.220 に答える