Android Как изменить размер и сохранить изображение с камеры в виде растрового изображения для отображения в фиксированной прямоугольной области в activity

#android #bitmap

#Android #растровое изображение

Вопрос:

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

ЗАХВАТ ИЗОБРАЖЕНИЯ:

 surfHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

captImageView = (ImageView)findViewById(R.id.CamImageView);

byte [] photoData;
Camera cam;
SurfaceHolder surfHolder;
SurfaceView surfView;


Camera.PictureCallback cback;

cback = new Camera.PictureCallback() {

        @Override
        public void onPictureTaken(byte[] data, Camera camera) {

                        final int length = data.length;
                opts.inSampleSize = 4;
            final BitmapFactory.Options opts = new BitmapFactory.Options();    
            Bitmap bMap = null;

            try {

                    bMap = BitmapFactory.decodeByteArray(data, 0, length, opts);

            } catch(Exception e) {

            }catch(OutOfMemoryError e) {

            } 

            captImageView.setImageBitmap(bitmap);

            if(bMap==null) {
               cam.startPreview();
            } else {
                             savePhotoButton.setVisibility(ImageView.VISIBLE);
                 takePhotoButton.setVisibility(ImageView.INVISIBLE);
                 photoData = data;
            }
        }
 }
  

СОХРАНЕНИЕ ИЗОБРАЖЕНИЯ:

 captImageView.setImageBitmap(null);
// SAVE THE PICTURE   THIS SAVES PICTURE IN WRONG SIZE.  LOOKS LIKED ZOOMED IN NOT WHAT WAS PREVIEWED!!!


           public void photoSave(byte[] data) {

               final int length = data.length;
           final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inSampleSize = 2;

                try {
        Bitmap bMap = BitmapFactory.decodeByteArray(data, 0, length, options);
         int quality = 75;
             File file = new File(getDir(), fname);
         fileOutputStream = new FileOutputStream(file);
         bMap.compress(CompressFormat.JPEG, quality, fileOutputStream);
        }catch(FileNotFoundException e) {

        }  catch(OutOfMemoryError e) {} }
  

ОТОБРАЖЕНИЕ ИЗОБРАЖЕНИЯ как ОТОБРАЖАЕМОГО в ACTIVITY
НЕ РАБОТАЕТ, ПОКАЗЫВАЕТ ИЗОБРАЖЕНИЕ КАК УВЕЛИЧЕННОЕ Или ЧАСТИ, КОТОРЫЕ ВООБЩЕ НЕ ВИДНЫ в ПРЕДВАРИТЕЛЬНОМ ПРОСМОТРЕ, КОГДА БЫЛ СДЕЛАН снимок!!

 BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = inSampSize;
Bitmap bitmap = BitmapFactory.decodeFile(path, options);

Drawable drawable = bitmap;
ImageView pictureView = (ImageView)findViewById(R.id.pictureViewer);
pictureView.setImageDrawable(drawable);
  

Комментарии:

1. Мне интересно, проблема в том, что мне нужно использовать только высоту / ширину, которые поддерживаются камерой? Может ли это быть проблемой? Спасибо