![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jul 2007
Сообщений: 159
|
Привет народ.
Такой вопрос. Есть картинка, отрисованная в битмапдату. Юзер на ней выделяет мышкой область, которая рисуется в другую битмапдату, меньшую по ширине и высоте, с матрицей маcштабирования. После этого рисунок, особенно на контрастных краях, сильно страдает. Аналогичное происходит в фотошопе, когда мы уменьшаем выделенный кусок слоя, до применения изменений. После применения - уменьшенная область как-то обрабатывается, и получаем красивую уменьшенную картинку с гладкими краями. Есть ли готовые классы по пост-обработке уменьшенной битмапдаты? Что посоветуете? |
|
|||||
|
Регистрация: Sep 2008
Адрес: Москва
Сообщений: 224
|
|
|
|||||
|
Регистрация: Jul 2007
Сообщений: 159
|
Хотя я и пишу на ас2/3 всего несколько лет, но про smoothing я знаю)
Это очень далеко от фотошопа. Все равно что джепег с качеством 10 и 100 сравнить. Ощущение такое, что при уменьшении, строки и столбцы пикселей накладываюстя на соседей. В итоге совершенно четкая наклонная линия выглядит как ломаная. |
|
|||||
|
Регистрация: Sep 2008
Адрес: Москва
Сообщений: 224
|
А должно быть всё нормально
![]() А вообще не стоит изменять размеры битмапы. Ну или скрины в студию. |
|
|||||
|
Регистрация: Jul 2007
Сообщений: 159
|
Вот скрины.
Первый сделан в фотошопе, второй во флеше, и потом сохранен JPEGEncoder-ом (сразу заверю, что визуально качество после сохранения флешой совершенно не изменилось, это можно не учитывать). Smoothing самый что ни на есть true. Без него еще хуже. Обратитие внимание на руку, нос (бедная девушка), и др. контрастные переходы цветов. При еще большем исходном изображении искажения становятся сильнее. Но я их не стану показывать, т.к. сюжет там порнографический. Если слегка двигать область отрисовки, то искажения смещаются, и при некотором положениий минимальны. Что интересно, при увеличении (конечное больше исходного) искажения более приемлемы. Походу гасятся в артефактах джепега. Последний раз редактировалось morgenshtern; 17.09.2009 в 02:56. |
|
|||||
|
часто сталкиваюсь с такой проблемой... весной написал такой вот код... Юзаю по надобности, выдрал с первого попавшегося проекта... потому, лишнее думаю выбросите сами, что нужно добавите... В принципе меня это качество устраивает.
Здесь по соображениям производительности использовался PNG энкодер, так как только на экран нужно было превьюшки выводить... Замена на JPEG на качество не повлияет... private function resize(loader:Loader):void { if (Math.max(loader.width,loader.height) > 100 ) { var bit:BitmapData = new BitmapData(loader.width, loader.height, false); bit.draw(loader, loader.transform.matrix); loader.unload(); var d:Bitmap=new Bitmap(bit,"auto",true); d.width=100; d.scaleY=d.scaleX; var bit2:BitmapData=new BitmapData(d.width,d.height,false); bit2.draw(d,d.transform.matrix); var v:Bitmap=new Bitmap(bit2); var png:ByteArray = PNGEncoder.encode(bit2); loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, loaded); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, resized); loader.loadBytes(png); }else { resized(null); } } |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
morgenshtern, справа smoothing отсутствует.
|
|
|||||
|
Регистрация: Jul 2007
Сообщений: 159
|
Включено там сглаживание.
Но вот другой пример. Матрица не используется, картинка уменьшена заранее. Просто копируем пикселы из выделенной области и рисуем в другой битмапдате. Видите некие интерлейсные вертикальные полосы на границах? Откуда они могут быть? Если двигать область выделения полосы оживают и перемещаются в другие места. Получаем идентичную исходной картинку, только с этими зазубринами, в некоторых местах. В других местах - края одинаково гладкие. Партизан, не совсем понял что вы делаете и зачем. Итак, вы отрисовываете в битмапдату картинку с лоадера, с матрицей масштабирования. Затемы вы создаете с битмапдаты рисунок, и масштабируете его. Затема опять рисуете битмап в битмапдату. Опять создаете из нее битмап... Кодируете битмап в пнг и грузите его опять в лоадер. Прямо какое-то колесо сансары. Мучений много, а в итоге не известно что. Сколько в мс этот процесс у вас занимает? Это действительно дает красивую смасштабированную картинку? Последний раз редактировалось morgenshtern; 17.09.2009 в 16:23. |
|
|||||
|
Регистрация: Sep 2008
Адрес: Москва
Сообщений: 224
|
А у меня всё отлично работает
private var _loader:Loader = new Loader(); public function Lol() { _loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete); _loader.load(new URLRequest('1.jpg')); stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; } private function onComplete(e:Event):void { var bit:Bitmap = _loader.content as Bitmap; addChild(bit); bit.smoothing = true; var bit2:BitmapData = new BitmapData(bit.width,bit.height); bit2.draw(bit,new Matrix(0.7,0,0,0.7,0,0)); addChild(new Bitmap(bit2)); getChildAt(1).x = 300; (getChildAt(1) as Bitmap).smoothing = true; } |
|
|||||
|
Сервис keep4u.ru сильно сжимает конечно, но результат думаю видно...
![]() По времени: Bitmap: 159 Jpeg(80): 650 включая время затраченное на Bitmap |
![]() |
![]() |
Часовой пояс GMT +4, время: 17:45. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|