
24.05.2015, 19:21
|
|
Регистрация: Sep 2010
Сообщений: 167
|
Нет, я использую нативный энкодер. Сторонние сильно тормознутые и жрут чудовищно много памяти.
У меня система такая:
1) есть спрайт размером 5000х5000 - предположим
2) я создаю BitmapData размером 5000*scale - переменная scale отвечает за масштаб съёмки
3) я создаю матрицу трансформации, и устанавливаю matrix.scale(scale, scale);
4) делаю BitmapData.Draw с заданной выше матрицей трансформации
И тут возникает первая проблема: если размер BitmapData будет больше чем определённое число (если scale=3, то габариты будут 15000х15000) - выходит ошибка *2015*. Тогда ловлю исключение, понижаю коэффициент scale и начинаю заново.
5) создаю byteArray и JPEGEncoderOptions
6) делаю BitmapData.encode на этот byteArray, с размером квадрата 5000*scale
Тут я хочу отследить прогресс создания файла и как-то вывести его на экран.
7) сохраняю через FileReference
Очевидно узкое место - слишком большое разрешение BitmapData, как результат - долгая перекодировка и возможность возникновения ошибки BitmapData (типа нехватка памяти в ОС). Поэтому хочу сделать много разных BitmapData, массивом, и потом каждый по отдельности перекодировать в свой byteArray, и в конце все их склеить в один большой и вывести в файл.
Как мне нарезать мой спрайт на части? Чем пользоваться? В плане, какие параметры юзать для матрицы трансформации и для BitmapData.Draw?
|