Я загружаю jpeg-файл через BitmapFactory и пытаюсь сохранить его снова (позже я хочу сделать некоторые вычисления по данным пикселов, прежде чем снова его сохранить).Сохранение файлов JPEG в Android без потери информации о пикселях
Но если я пытаюсь сохранить его
FileOutputStream fos = new FileOutputStream(new File("/sdcard/test.jpg"));
originalImage.compress(Bitmap.CompressFormat.JPEG, 100, fos);
, то это не точно такой же результат, как и в оригинальной картине. Некоторые пиксели имеют разные значения цвета, и это не полезно для моих последующих вычислений.
Есть ли возможность безопасного его без потерь? Или проблема уже при загрузке изображения с
Bitmap originalImage = BitmapFactory.decodeFile("/sdcard/input.jpg");
несколько строк раньше?
Хорошо, но когда я пытаюсь использовать Java в обычном проекте, я бы сделал это с помощью 'BufferedImage originalImage = ImageIO.read (new File (" input.jpg ")); ImageIO.write (originalImage, "jpg", новый файл ("test.jpg")); 'и это будет работать без потерь. К сожалению, Android не поддерживает ImageIO, но нет ли способа сделать это так? – Steve
Используйте сжатие без потерь, например PNG, если вы не хотите, чтобы значения пикселей изменялись. – BitBank
К сожалению, нет гарантии, что * x = compressJpeg (распаковатьJpeg (x)) * выполняется для всех * x *. (Это может быть * очевидно, для некоторых значений * x * и некоторых jpeg-алгоритмов, но вы не должны полагаться на него.) Как говорит BitBank, используйте PNG (или BMP) для хранения изображений без потерь. – aioobe