Изображения jpeg, которые я сохраняю из своего приложения для Android, не полностью ясны - PullRequest
0 голосов
/ 02 мая 2019

Я должен сохранить android.media.Image как растровые изображения и в конечном итоге сжать в формате JPEG. Сохраненные изображения - половина изображения и половина серого. Также изображения поворачиваются.

#

изображение= frame.acquireCameraImage ();

                    Log.i("Bitmap", "-60");
                    Image.Plane[] planes = image.getPlanes();
                    Log.i("Bitmap", "-6");
                    ByteBuffer buffer = planes[0].getBuffer();
                    ByteBuffer buffer1 = planes[1].getBuffer();
                    Log.i("Bitmap", "-15");
                    ByteBuffer buffer2 = planes[2].getBuffer();
                    Log.i("Bitmap", "-7");
                    int format = image.getFormat();
                    int width = image.getWidth();
                    int height = image.getHeight();
                    Log.i("Bitmap", "-20");
                    Rect cropRect = new Rect(0, 0, width, height);
                    Log.i("Bitmap", "-8");
                    byte[] arr = new byte[buffer.remaining()];
                    buffer.get(arr);
                    Log.i("Bitmap", "-9");
                    byte[] arr1 = new byte[buffer1.remaining()];
                    buffer1.get(arr1);
                    Log.i("Bitmap", "-10");
                    byte[] arr2 = new byte[buffer2.remaining()];
                    buffer2.get(arr2);
                    image.close();
                    Log.i("Bitmap", "-5");
                    byte[] c = new byte[arr.length + arr1.length + arr2.length];
                    Log.i("Bitmap", "-1");
                    System.arraycopy(arr, 0, c, 0, arr.length);
                    Log.i("Bitmap", "-2");
                    System.arraycopy(arr1, 0, c, arr.length, arr1.length);
                    Log.i("Bitmap", "-3");
                    System.arraycopy(arr2, 0, c, arr1.length, arr2.length);
                    Log.i("Bitmap", "0");
                    YuvImage yuvImage = new YuvImage(c,ImageFormat.NV21,width,height, null);
                    Log.i("Bitmap", "1");
                    ByteArrayOutputStream b = new ByteArrayOutputStream();
                    Log.i("Bitmap", "1");
                    yuvImage.compressToJpeg(cropRect, 90, b);
                    byte[] jpegData = b.toByteArray();
                    Log.i("Bitmap", "2");
                    BitmapFactory.Options options = new BitmapFactory.Options();
                    options.inPreferQualityOverSpeed=true;
                    // int scaleFactor;
                    //options.inSampleSize = scaleFactor;
                    Log.i("Bitmap", "3");
                    Bitmap bitmap = BitmapFactory.decodeByteArray(jpegData, 0, jpegData.length, options);
                    saveBitmap(bitmap);

1 Ответ

0 голосов
/ 02 мая 2019

Bitmap bitmap = BitmapFactory.decodeByteArray (jpegData, 0, jpegData.length, параметры);

это ваш код, пожалуйста, измените его на

Bitmap bitmap = BitmapFactory.decodeByteArray (jpegData, 100, jpegData.length, options);

в вашем коде вы установили качество на 0, следовательно, проблема, пожалуйста, измените его на 100, чтобы изображение было таким, как оно есть. Надеюсь, это поможет.

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