Я хочу повернуть файл изображения (фотографию) без изменения размера файла:
Я применяю поворот:
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);
но размер моего исходного файла удвоился!
Загружаемое изображение кодируется в определенном формате (например, JPEG) и с определенным качеством сжатия (где лучшее качество равно большему размеру файла). Когда вы сохраняете его после поворота, вы указываете потенциально совершенно другой формат и качество сжатия, следовательно, разницу в размерах.
Я не думаю, что вы можете гарантировать одинаковый размер, если оба входных и выходных файла не являются сжатыми растровыми изображениями, но вы, вероятно, можете, по крайней мере, попытаться выяснить, какой формат и качество были использованы для исходного изображения и используйте эти настройки, когда вы снова сохраните файл, используя bitmap.compress. Это должно дать вам размер файла в одном и том же футбольном поле по крайней мере.
Помимо формата сжатия, попробуйте создать битмап с тем же конфигом, что и изображение 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 должен иметь все, что вам нужно (и размер).