Поворот файла изображения без изменения размера файла - PullRequest
1 голос
/ 25 мая 2011

Я хочу повернуть файл изображения (фото) без изменения размера файла:

  • Я создаю растровое изображение с помощью Bitmap.decodeFile
  • Я применяю вращение:

    Matrix matrix = new Matrix();
    matrix.postRotate(90);
    bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
    
  • Я сохраняю растровое изображение в файл с:

    bitmap.compress(CompressFormat.JPEG, 100, stream);
    

но размер моего исходного файла удвоился !!

Ответы [ 2 ]

4 голосов
/ 25 мая 2011

Загружаемое изображение кодируется в определенном формате (например, JPEG) и с определенным качеством сжатия (где лучшее качество равно большему размеру файла). Когда вы сохраняете его после поворота, вы указываете потенциально совершенно другой формат и качество сжатия, отсюда и разница в размере.

Я не думаю, что есть какой-либо способ гарантировать одинаковый размер, если только входные и выходные файлы не являются несжатыми растровыми изображениями, но вы, вероятно, по крайней мере можете попытаться выяснить, какой формат и качество использовались для исходного изображения и используйте эти настройки при повторном сохранении файла с помощью bitmap.compress. Это должно дать вам размер файла в том же приблизительном поле как минимум.

0 голосов
/ 25 мая 2011

Помимо формата сжатия попробуйте создать растровое изображение с той же конфигурацией, что и для изображения src. Я бы предложил RGB_565: http://developer.android.com/reference/android/graphics/Bitmap.Config.html

Это приведет к лучшим значениям по умолчанию.

mCanvas = new Canvas();
mBitmap = Bitmap.createBitmap(this.width, this.height,
    Bitmap.Config.RGB_565);
mCanvas.setBitmap(mBitmap);

Теперь, если вы сделаете какую-либо мысль в mCanvas, она будет сохранена в растровом изображении:

mCanvas.save();
mCanvas.translate or roate
mCanvas.drawBitmap(<your real bitmap here>)
mCanvas.restore();

Теперь mBitmap должен иметь все, что вам нужно (и размер).

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