Android: как сохранить изображение в созданной папке с его реальным размером - PullRequest
0 голосов
/ 06 февраля 2012

Я хочу сохранить мою фотографию в созданной папке с ее фактическим размером. Для этого я перепробовал много кода, но в любом случае фотография сохранялась в галерее с ее фактическим размером, но когда я сохранил эту фотографию в моем местоположении, то фотография сжимается. После этого я попытался скопировать фотографию из Галереи в свою папку, чтобы получить фотографию с ее реальным размером. В этом случае фотография копируется, но не с ее фактическим размером. Это снова сжимается. Для открытия камеры:

    Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(
            Intent.createChooser(cameraIntent, "Select Picture"),
            CAMERA_REQUEST);

после этого в onActivityResult метод:

try {
        if (requestCode == CAMERA_REQUEST) {
            Bitmap photo = (Bitmap) data.getExtras().get("data");

            if (photo != null) {
                imageView.setImageBitmap(photo);
            }

            // Image name

            final ContentResolver cr = getContentResolver();
            final String[] p1 = new String[] {
                    MediaStore.Images.ImageColumns._ID,
                    MediaStore.Images.ImageColumns.DATE_TAKEN };
            Cursor c1 = cr.query(
                    MediaStore.Images.Media.EXTERNAL_CONTENT_URI, p1, null,
                    null, p1[1] + " DESC");
            if (c1.moveToFirst()) {
                String uristringpic = "content://media/external/images/media/"
                        + c1.getInt(0);
                Uri newuri = Uri.parse(uristringpic);
                // Log.i("TAG", "newuri "+newuri);
                String snapName = getRealPathFromURI(newuri);

                Uri u = Uri.parse(snapName);

                File f = new File("" + u);
                String fileName = f.getName();

                editTextPhoto.setText(fileName);
                checkSelectedItem = true;

                ByteArrayOutputStream bos = new ByteArrayOutputStream();
                photo.compress(CompressFormat.PNG, 0 /* ignored for PNG */,
                        bos);
                byte[] bitmapdata = bos.toByteArray();

                // Storing Image in new folder


//  StoreByteImage(mContext, bitmapdata, 100, fileName);


                copyImageFromGallery(newuri);






                // To appear images in created folder of Gallery dynamically
                // as soon as they
                // are captured.
                sendBroadcast(new Intent(
                        Intent.ACTION_MEDIA_MOUNTED,
                        Uri.parse("file://"
                                + Environment.getExternalStorageDirectory())));

                // Delete the image from the Gallery

                getContentResolver().delete(newuri, null, null); // for delete

            }
            c1.close();

        }
    } catch (NullPointerException e) {
        System.out.println("Error in creating Image." + e);

    } catch (Exception e) {
        System.out.println("Error in creating Image." + e);
    }

Теперь я копирую свою галерею форм изображений в мою папку:

protected void copyImageFromGallery(Uri uri){

    try {
        File sd = Environment.getExternalStorageDirectory();
        File data = Environment.getDataDirectory();
        if (sd.canWrite()) {
            String sourceImagePath= uri.toString();


            File sdImageMainDirectory = new File(
                    Environment.getExternalStorageDirectory() + "/pix/images");
                if (!sdImageMainDirectory.exists()) {
                    sdImageMainDirectory.mkdirs();
                }



            String destinationImagePath= Environment.getExternalStorageDirectory() + "/pix/images";
            File source= new File(data, souceImagePath);
            File destination= new File(sd, destinationImagePath);
            if (source.exists()) {
                FileChannel src = new FileInputStream(source).getChannel();
                FileChannel dst = new FileOutputStream(destination).getChannel();
                dst.transferFrom(src, 100, src.size());
                src.close();
                dst.close();
            }
    }} catch (Exception e) {}


    }

здесь фотография копируется в мою папку, но пока она не сжата.

1 Ответ

0 голосов
/ 06 февраля 2012

используйте cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); здесь outputFile Uri - это местоположение файла, который вы хотите сохранить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...