Показать сообщение отдельно
Старый 24.05.2015, 19:21
Alex626 вне форума Посмотреть профиль Отправить личное сообщение для Alex626 Найти все сообщения от Alex626
  № 8  
Ответить с цитированием
Alex626

Регистрация: 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?