![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jan 2008
Сообщений: 6
|
Здравствуйте,
Копирую часть _root в BitmapData с масштабированием, а затем кодирую JPEGEncoder-ом. В результате получается с виду валидный файл (по крайней мере, он начинается с 0хFFD8,0xFFE0 и заканчивается 0xFFD9). Но файл никто не хочет открывать. Все пишут, что он поврежден или там что-то некорректное. Проблема, которую я пытаюсь решить, состоит в довольно большом размере картинки, которую я пытаюсь создать в результате. Если пытаться создать BitmapData в полный размер (~8000x5000), то просто выскакивает ошибка. Поэтому я делю все на части и пытаюсь выдать по частям. При делении на 6x6 ошибки нет, но результат либо вообще без валидного терминатора, либо терминатор есть, но файл все равно ничем не открывается. Код создания: public function getImgBinary(kX:Number, splitFactor:Number, outRectNumX:Number, outRectNumY:Number):String { // result size var szX:Number = Math.ceil(this.stage.stageWidth * kX / splitFactor); var szY:Number = Math.ceil(this.stage.stageHeight * kX / splitFactor); // capture size var capSzX:Number = Math.floor(this.stage.stageWidth / splitFactor); var capSzY:Number = Math.floor(this.stage.stageHeight / splitFactor); // capture start position var capX:Number = outRectNumX * capSzX; var capY:Number = outRectNumY * capSzY; // capture matrix var mtx:Matrix = new Matrix(kX, 0, 0, kX, -capX, -capY); // result var bmp:BitmapData = new BitmapData(szX, szY, false, 0xFFFFFFFF); bmp.draw(this, mtx, null, null, new Rectangle(0, 0, capSzX, capSzY), false); // //var b:ByteArray = PNGEncoder.encode(bmp); // var encoder:JPGEncoder = new JPGEncoder(100); var b:ByteArray = encoder.encode(bmp); // var b64:Base64Encoder = new Base64Encoder(); b64.encodeBytes(b); return b64.toString(); } Полученный JPG файл присоединяю. Пытался обновить сам код com.adobe.images.* с оф. сайта. Не помогает. Заранее спасибо. |
|
|||||
|
Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
|
А если сохранить напрямую без преобразования в Base64?
|
|
|||||
|
Регистрация: Jan 2008
Сообщений: 6
|
Я из дельфевой проги его юзаю. Возврат из CallFunction - это XML-строка. Там нельзя бинарник засунуть.
Да и к тому же, если в конце файла валидный терминатор, то значит он до конца прошел через base64. Или что, base64 его кусками закодировал? Что-то не верится. Но, если скажете, как можно по-простому передать бинарник - я, разумеется, попробую. |
|
|||||
|
Регистрация: Jan 2008
Сообщений: 6
|
Попробовал возвращать еще и исходную длину бинарника:
var b64:Base64Encoder = new Base64Encoder(); b64.encodeBytes(b); var res:String; res = "$" + b.length.toString() + "$" + b64.toString(); return res; На всякий случай прилагаю файлы - txt - возврат из CallFunction, b64 - вырезанный из ответа, а PNG - декодированный b64. |
|
|||||
|
Регистрация: Jan 2008
Сообщений: 6
|
В общем проблема действительно была в Base64Encoder.
После вставки все стало декодироваться корректно. |
![]() |
![]() |
Часовой пояс GMT +4, время: 20:18. |
|
|
« Предыдущая тема | Следующая тема » |
|
|