Я создаю приложение на Android, где мне нужно манипулировать файлами JPG. Я не получаю много информации заголовка для формата JPG, поэтому для этого я конвертирую его в Bitmap, манипулируя значениями пикселей в растровом изображении, а затем снова конвертирую его обратно в JPG.кодирование и декодирование изображений JPG в Android
В этой проблеме я столкнулся - после манипулирования только некоторыми пикселями растрового изображения и , преобразовывая его обратно в JPG, я не получаю тот же набор пикселей, что и раньше (для тех пикселей, которыми я не манипулировал). Я получаю то же изображение, что и оригинал в новом изображении. Но когда я проверяю новые значения пикселей изображения для декодирования, нетронутые пикселей отличаются ...
File imagefile = new File(filepath);
FileInputStream fis = new FileInputStream(imagefile);
Bitmap bi = BitmapFactory.decodeStream(fis);
int intArray[];
bi=bi.copy(Bitmap.Config.ARGB_8888,true);
intArray = new int[bi.getWidth()*bi.getHeight()];
bi.getPixels(intArray, 0, bi.getWidth(), 0, 0, bi.getWidth(), bi.getHeight());
int newArray[] = encodeImage(msgbytes,intArray,mbytes); // method where i am manipulating my pixel values
// converting the bitmap data back to JPG file
bi = Bitmap.createBitmap(newArray, bi.getWidth(), bi.getHeight(), Bitmap.Config.ARGB_8888);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bi.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] data = baos.toByteArray();
Bitmap bitmapimage = BitmapFactory.decodeByteArray(data, 0, data.length);
String filepath = "/sdcard/image/new2.jpg";
File imagefile = new File(filepath);
FileOutputStream fos = new FileOutputStream(imagefile);
bitmapimage.compress(CompressFormat.JPEG, 100, fos);
Помощь меня, если я ошибаюсь, где-то должен ли я использовать другой метод для управления значениями JPG пиксельные ...
Да, но мне нужно сохранить его в файлах JPG, так как большинство мобильных пользователей используют файлы изображений JPG .... нет ли способа сделать все мои кодировки в JPG n все еще в состоянии получить все данные? – Tani
Зависит от того, что вы имеете в виду с _retrieve всех данных_. По умолчанию JPEG является форматом с потерями, и есть только несколько манипуляций (например, обрезка и поворот), которые можно выполнить без потери дополнительной информации с помощью JPEG. По крайней мере, если вы откроете и сохраните изображение с помощью методов, предоставляемых SDK, вы потеряете информацию. – Niels