Как состыковать фрагменты картинки?
Вложений: 1
Сабж. Нарезаю, а затем складываю картинку из фрагментов, появляются вот, такие вот, просветы. Как это утрясти? Координаты типа Number. Если ставлю int то, естественно, потом не хватает снизу и/или сбоку.
|
Нарезать нужно на целые координаты. То есть не нужно делить 110 на 3 части. Тогда всё встанет отлично.
|
Даже если 110 на 3 - округлить 110 до близжайшего кратного трем, запомнить разницу, близжайшее кратное поделить, а потом из результата вконце вычесть разницу.
Т.е. например: близжайшее кратное для 110 будет 111, находим следующим образом: Math.ceil(110 / 3). разница: 1 (Находим: 111 - 110). нарезаем: первый "кусок": (111 / 3) * 1 = (0..37). Второй "кусок" (111 / 3) * 2 - "первый кусок" = (37..74). "Последний кусок": (111 / 3) * 3 - ("второй кусок" + разница) = (74..110). |
Блин! А, ведь, действительно!
Спасибо, wvxvw! Я знал, что в беде не оставишь! Огромное спасибо! :) Спасибо, Тигра. Но, проблема была ещё и в том, что я, на самом деле, незнаю: какая будет картинка и насколько частей будет делиться. Знаю, только, что кол-во "столбцов" будет равно кол-ву "строк". |
Вложений: 1
В развитие сабжа.
Сегменты строю через shape.graphics.drawPath, задавать ли lineStyle(1, color, 1, true/false), или не задавать вовсе толщину линии - не заметил существенной разницы. К фигуре применяю фильтр, после чего отрисовываю ее в отображаемой Bitmap'e, общей для всех сегментов, через BitmapData.draw(..). Объект анимирован. Если btm.stage.quality = StageQuality.LOW, то промежутки м/у сегментами исчезнут, естественно, заодно с антиалиазингом, который не был лишним. Алиазинг, положим, не проблема, - его могу "размазать" фильтром,- но места стыков сегментов выглядят все равно не важно: при определенных углах становятся заметными "тени" - нормали пикселей не стыкуются, как должны. Возможно, кто-то сталкивался с такой проблемой - как лучше поступить в этом случае: может быть проще смешать цвет граничного пиксела и его соседей в уже отрендеренном соседнем сегменте? Хорошо бы "подмешать" соседей из обрабатываемого сегмента, но тут я не вполне понимаю (а найти указаний на этот счет не удалось) механику обработки шейдером входного изображения - может ли шейдер обратится к уже обработанному пикселу (т.е. может ли оказаться таким samplenearest(outCoord().x+1, outCoord().y+1)?), или входное изображение кешируется на время работы шейдера (тогда "подмес" соседей по сегменту неуместен)? Шейдеры пишу не в Pixel Bender, a посредством PBJ Assembler, и вследствие муторности этого приема, не хочется экспериментировать лишнего. Да и любой фильтр - тормоз, а здесь, хоть и по граничным только точкам, но опрашивать 9 соседей в отрендеренном сегменте и 8 в своем - это не есть хорошо. Идеальный случай был бы - состыковать точно фрагменты, но не дается. Буду признателен за любые идеи. |
Я такую штуку делал внахлест на один пиксель. тогда ок. Если полотно совсем уж большое, то можно и больше, но одного как правило достаточно.
Добавлено через 2 минуты Прикол в том что если встык - то при анимировании будет расползаться из-за нецелых координат, даже если порежешь красивенько встык. Нахлест спасает визуально. Если это будет нечто статичное тогда без проблем можно и как wvxvw советует. |
ещё советую прочитать вот это http://habrahabr.ru/post/147165/
|
Рисунок, который я помещал в пост, испарился... , я его удалил из приаттаченных, посчитав, что раз ссылка на его размещение есть в посте, то он никуда не денется. Завтра исправлю - сейчас не за компом.
to Dukobpa3: Я пробовал стиль линии в разные пиксели. Проблема в том, что нормали должны быть точно просчитаны в месте смыканий, иначе заметна граница. to Aquahawk: И с прозрачностью я уже экспериментировал. Неделя убита на тесты. |
Через drawTriangles нормально у меня всё стыковывалось. Там есть параметр smothing.
Ну а вообще надо целочисленные и copypixels в битмапу. |
Вложений: 1
Цитата:
|
Часовой пояс GMT +4, время: 04:24. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.