Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > Flex

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 14.02.2009, 18:58
ix18 вне форума Посмотреть профиль Отправить личное сообщение для ix18 Найти все сообщения от ix18
  № 1  
Ответить с цитированием
ix18

Регистрация: Feb 2009
Сообщений: 11
По умолчанию Быстрая обработка изображения

Одна часть вопроса уже была рассмотрена в теме "Редактирование изображений перед отправкой ", однако возникла еще одна проблема.

Общая схема редактирования такова:
1. Создание объекта BitmapData из ByteArray.
2. Манипуляция (масштабирование, поворот).
3. Перевод из BitmapData в ByteArray.

Вот как-раз по этому пункту и есть главный вопрос. Использую JPEGEncoder, метод encode. Все работает, но скорость оставляет желать много лучшего.

Причем, недавно довелось мне увидеть и использовать новую версию загрузчика изображений в социальной сети "ВКонтакте". Там, сразу после загрузки изображения пользователя во флеш, происходит масштабирование - прямо на клиенте - и занимает оно ...... - не более 5 секунд!

Причем, пробовал туда подсунуть изображение ~5000*3000, обработка которого посредством моего скрипта занимает на 2*ядерном процессоре примерно полминуты. А тут - 3 сек. Странно.

Может это Алхимия? Вобщем, очень хотелось бы услышать ваши мнения, может есть готовые паттерны или компоненты для решения такой задачи.

Добавлено через 4 минуты
Кстати, относительно разрешения той картинки: оно 5120*3250, что по докам флекса не приемлемо:
Код:
The maximum width and maximum height of a BitmapData object is 2880 pixels.
Однако, работает нормально

Старый 14.02.2009, 19:19
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
А кто вам сказал, что процесс конвертации вконтакте происходит на клиентской стороне?

Старый 14.02.2009, 19:30
ix18 вне форума Посмотреть профиль Отправить личное сообщение для ix18 Найти все сообщения от ix18
  № 3  
Ответить с цитированием
ix18

Регистрация: Feb 2009
Сообщений: 11
Цитата:
А кто вам сказал, что процесс конвертации вконтакте происходит на клиентской стороне?
Вопрос хороший. Это может быть и неправдой. Но после подгрузки изображения во флешку и нажатии кнопки "Отправить", он показывает размер отправляемой картинки.

Например, для изображения размером в 3,5МБ, он говорит, что объем отправляемых данных - всего 23КБ. Причем, делается это все настолько оперативно, что я тоже сомневаюсь в редактировании на клиенте. Однако так...

Старый 14.02.2009, 20:05
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 4  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Чего-то с вашим скриптом не так... делал следующее: загрузка последовательности картинок в формате BMP (т.е. не поддерживаем напрямую Loader'ом) микширование, отрисовка в новую картинку и отсылка обратно.
(понятно, что делалось это для того, чтобы отрендерить видео). По моим наблюдениям, даже не сильно оптимизированый код должен успеть сделать то, что вы описали на клиенте за 5 секунд... единственное, я использовал PNGEncoder, JPEGEncoder действительно дольше работает, а размер мне был не принципиален.
Так что оптимизируйте... задача вполне выполнимая.
__________________
Hell is the possibility of sanity

Старый 14.02.2009, 20:57
ix18 вне форума Посмотреть профиль Отправить личное сообщение для ix18 Найти все сообщения от ix18
  № 5  
Ответить с цитированием
ix18

Регистрация: Feb 2009
Сообщений: 11
Цитата:
(понятно, что делалось это для того, чтобы отрендерить видео)
Покадрово в BMP?

Цитата:
По моим наблюдениям, даже не сильно оптимизированый код должен успеть сделать то, что вы описали на клиенте за 5 секунд... единственное, я использовал PNGEncoder, JPEGEncoder действительно дольше работает, а размер мне был не принципиален.
Да, я заметил, что PNGEncoder работал немного быстрее. Но ключевое слово - "немного". А какой у Вас был размер изображений, что они кодировались за 5 сек?

Цитата:
Так что оптимизируйте... задача вполне выполнимая.
Дык что тут оптимизировать, если самый узкий момент заключается в строке:
Код AS3:
source = jpegEncoder.encode(bitmapData);

Старый 14.02.2009, 21:12
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 6  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Да, примерно так:
C# приложение открывает какой-нть AVI, и высылает флешке покадрово через сокет (в реальности через несколько сокетов, для каждого видео отдельно). AVI несжатый ничем фактически от BMP не отличается. флешка принимает / комбинирует картинки по заданному сценарию / рендерит и отсылает обратно уже в PNG. Видео 30 фпс формата 640х480 рендерится таким способом (при условии, что есть всего 1 входящее видео + какая-нибудь незамысловатая графика / немного текста) примерно в соотношении 20 минут рендеринга на 15 секунд видео. т.е. получается 2.4 секунды на 307200 пикселей.
__________________
Hell is the possibility of sanity

Старый 14.02.2009, 21:38
ix18 вне форума Посмотреть профиль Отправить личное сообщение для ix18 Найти все сообщения от ix18
  № 7  
Ответить с цитированием
ix18

Регистрация: Feb 2009
Сообщений: 11
В моем случае, простое декодирование в jpeg изображение 640*480 на флешке занимает от 0.5 до 1 секунды. Но, с большими разрешениями, разница получается просто геометрического порядка

Нашел вот такую ссылку: http://www.switchonthecode.com/tutor...s-jpeg-encoder. Видно, что проблема такая есть - обработка не быстрая, приходится использовать асинхронный вызов.

Но все же интересно - как они "ВКонтакте" с такой проблемой и так изящно справились???

Старый 14.02.2009, 23:10
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 8  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Чего-то у вас не срастается... либо вы посылаете большую картинку и тогда ее не нужно кодировать, отправляем как есть, либо вы ее уменьшаете и после этого кодируете...
>> что объем отправляемых данных - всего 23КБ
>> Кстати, относительно разрешения той картинки: оно 5120*3250,
такая картинка будет столько весить если она Ч/Б и изображен на ней "черный квадрат Малевича"
__________________
Hell is the possibility of sanity

Старый 15.02.2009, 00:42
ix18 вне форума Посмотреть профиль Отправить личное сообщение для ix18 Найти все сообщения от ix18
  № 9  
Ответить с цитированием
ix18

Регистрация: Feb 2009
Сообщений: 11
Это реальный пример: приложение обрабатывает (масштабирует) изображение, которое весит 3,5 МБ за 3-5 сек. В результате, его размер: 604px × 383px, вес - 18.3 КБ. Как за такое время можно так пожать картинку на клиенте при помощи флеша???


Последний раз редактировалось ix18; 15.02.2009 в 00:42. Причина: Пунктуационная ошибка =)
Старый 15.02.2009, 01:26
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 10  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Ну так наверное сначала скейлить все-таки? Чего-то я вообще перестал понимать...
загрузили картинку, создали битмапдату нужного размера, отрисовали туда уменьшеную картинку, перекодировали... это ну никак не может занять больше нескольки секунд...
__________________
Hell is the possibility of sanity

Создать новую тему Ответ Часовой пояс GMT +4, время: 18:15.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
encoding , image
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 18:15.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.