Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Общие вопросы о Flash (не затрагивающие ActionScript) (http://www.flasher.ru/forum/forumdisplay.php?f=60)
-   -   Намеренное искажение растровой картинки (http://www.flasher.ru/forum/showthread.php?t=100674)

Нигилист 02.09.2007 03:42

Намеренное искажение растровой картинки
 
Здравствуйте!

Есть у меня вопрос, не дающий мне никак покоя. Как во флэше искажать вставленное растровое изображение (JPG, PNG, GIF), например растянуть трапециевидно?
Возможно ли это сделать посредством Macromedia Flash MX 2004 v.7.0, Macromedia Flash 8, Adobe Flash CS3 Pro?

Заранее благодарю.

aQuestion 02.09.2007 04:36

DisplacementMapFilter

Kikasso 02.09.2007 08:49

трапецевидно - только "как бы". http://silin.fatal.ru там смотрим

aksios 02.09.2007 11:39

Зачем во флеше редактировать вставленую картинку? Ну я понимаю, динамический эфект с фильтрами, но просто корежить то за чем.

Нигилист 02.09.2007 15:24

Цитата:

Сообщение от aQuestion
DisplacementMapFilter

aQuestion, что это? Можешь поподробнее рассказать, пожалуйста?

Цитата:

Сообщение от aksios
Зачем во флеше редактировать вставленую картинку? Ну я понимаю, динамический эфект с фильтрами, но просто корежить то за чем.

Мне нужно сделать псевдо3d-эффект: фотография лежит на столе (картинка соответственно искажена до трапеции, чтобы показать перспективу), и затем вылетает вперед во весь экран (увеличивается в размере и преобразуется обратно в квадрат). Т.е. квадратное растровое изображение я хочу в первом кадре деформировать в трапецию, а в последнем оставить в первозданном виде, чтобы получилось анимированное "превращение".

etc 02.09.2007 15:37

IDE не позволяет делать такие трансформации.

Нигилист 02.09.2007 15:49

Посмотрите, пожалуйста, вот это: http://silin.fatal.ru/#2,9.
Возможно ли реализовать подобное в седьмой версии Флэша?

combo 02.09.2007 16:52

Можно без DisplacementMapFilter. Суть простая: делаешь много мувиклипов, ставишь один под другим, в каждый из них пихаешь изображение, каждый раз уменьшаешь _ height или _yscale на какое-то число относительно предыдущего мувика, и просто склеиваешь их все вместе так, что получилась перспектива. Для достижение большей реальности - большее число уменьшаюшихся мувиков.

Нигилист 02.09.2007 17:55

А как же ось Х? Боковые стороны картинки должны сходиться в точку на горизонте.

aksios 02.09.2007 18:21

Цитата:

Сообщение от Нигилист
А как же ось Х? Боковые стороны картинки должны сходиться в точку на горизонте.

Ваще то не только. Есть еще сокращение глубины. Если по хорошему. В принципе, через фильтры можно добиться нужного эфекта. Но трудозатраты себя не оправдывают.

etc 02.09.2007 18:48

Цитата:

Сообщение от Нигилист
Посмотрите, пожалуйста, вот это: http://silin.fatal.ru/#2,9.
Возможно ли реализовать подобное в седьмой версии Флэша?

В седьмой — нет. А чем вас смущает восьмая?

Kikasso 02.09.2007 21:12

Цитата:

Сообщение от Нигилист
Возможно ли реализовать подобное в седьмой версии Флэша?

Там же есть подобное для мувиклиров, без битмапы, для семерки.

Нигилист 03.09.2007 01:28

Kikasso, ты имеешь ввиду "Мувик на части"???

Kikasso 03.09.2007 02:05

Он удалил. Забей, с битмапой лучше в разы. Если очень надо, напиши ему в личку.
По типу да, "мувик на части": игла в яйце, яйцо в утке, сверху все закрыто треугольными масками, поворачиваем, плющим и двигаем все части разом.

Нигилист 03.09.2007 02:28

Раз на седьмой версии это нереализуемо, то придется подождать день-два и поставить восьмую или девятую.

aQuestion 03.09.2007 02:32

Вложений: 1
1. для 7й версии тоже есть метода, точнее даже для 5й. делал некогда отец флеш-3Д, горячий прибалтийский парень. адрес не нашёл, потому аттачу локальную копию из своих архивов. разумеется, чтобы переделать silinовский класс искажения на этом, придётся попотеть.

2. DisplacementMapFilter єто такой фильтер, который представляет почти неограниченные возможности искажения битмапа (есть мелкие обломы с размером битмапа и с разрядностью смещений, практически не имеющие значения). Подробнее - в хэлпе.

silin 03.09.2007 10:46

та же схема(почти) для мувиков (без битмапДата) http://silin.fatal.ru/zabor/AS2/index.html (DistortQwad.as)
в новую версию не перетащил, потому как не актуально

chingachgoog 03.09.2007 11:30

Насколько я понимаю, упрощая задачу до обычного векторного прямоугольника, мы никоим образом программно, не можем ЭТОТ ЖЕ прямоугольник сделать трапецией.
Никакие битмапы и диспласменты с трансформами напрямую также трапецию не сделают.
ОСтается только делать многоходовки по типу треугольников.

aQuestion 03.09.2007 13:31

Цитата:

Сообщение от chingachgoog
Никакие битмапы и диспласменты с трансформами напрямую также трапецию не сделают.

Сделают.
Код:

mc.filters = [new DisplacementMapFilter(...)];

chingachgoog 03.09.2007 13:45

Какое отношение эта строчка имеет к тому, как сделать ТРАПЕЦИЮ? Это лишь пример как к мувику добавлять фильтры (в данном случае дисплайсмент)

aQuestion 03.09.2007 13:49

это имеет отношение к слову "напрямую" из твоего поста.

ты, наверно, хочешь чтобы я тебе сейчас быстренько карту смещений подогнал, но - извини - не то настроение :(

chingachgoog 03.09.2007 14:04

Нет, это не имеет отношения ни к "трапеции", ни "напрямую" сделать.
Напрямую трапецию никакие методы не сделают.
Ну нет такой трансформации во флеше (программной). :)

Все остальное - опосредовано (не напрямую) через многоходовки: и тут уже не важно каким инструментом делать: треугольными масками или дисплайсментом или еще как.

aQuestion 03.09.2007 14:18

ну, раз нет, значит нет.

iNils 03.09.2007 16:27

дисплайсментом не многоходовка

chingachgoog 03.09.2007 16:56

Можно пример, где обычный квадрат преобразуется в трапецию, без многоходовки?
На самом деле очень интересно.

iNils 03.09.2007 17:49

Вы про DisplacementMapFilter прочитали? Пример в хелпе с искажениями смотрели?
Задача сводится к построению правильного градиента для фильтра. У меня есть пример такого градиента, но он дома. Искать заново я его сейчас не буду. Поэтому либо сами в гугле ищите по словосочетанию "DisplacementMapFilter 3D", либо вам кто-то другой даст свой пример, либо ждите 1,5 недели, пока я из отпуска не вернусь и не найду этот пример.

Нигилист 03.09.2007 20:39

Цитата:

Сообщение от chingachgoog
Можно пример, где обычный квадрат преобразуется в трапецию, без многоходовки?
На самом деле очень интересно.

Не, ну векторный квадрат сделать трапецией вообще-то не проблема. Выбираешь инструмент scale и тянешь сначала один угол квадрата в сторону, зажав ctrl, а потом другой.

Или я не понял вопрос?

combo 06.09.2007 17:43

Вложений: 1
Вот моя жалкая попытка изобразить 3D-текстуру:rolleyes: (см.вложение)
но опять-таки - это под 8-ку

Golovach 06.09.2007 18:06

Очень даже неплохо получилось. Ограничить искажение и все будет ок. Респект.

chingachgoog 07.09.2007 13:05

Цитата:

Сообщение от iNils
Вы про DisplacementMapFilter прочитали? Пример в хелпе с искажениями смотрели?
Задача сводится к построению правильного градиента для фильтра.

Я понимаю, что DisplacementMapFilter искажает изображение так, что потом и руками похожее сделать проблематично :)
Но процесс мне кажется малоуправляемым. Именно из-за "построения правильного градиента".

Цитата:

Сообщение от iNils
У меня есть пример такого градиента, но он дома. ...ждите 1,5 недели, пока я из отпуска не вернусь и не найду этот пример.

С удовольствием взгляну, когда сам через пару недеь из отпуска вернусь :)
Только не забудьте.

iNils 04.10.2007 16:16

http://www.5etdemi.com/uploads/displacementmaptest.zip

aQuestion 04.10.2007 17:51

Цитата:

Сообщение от chingachgoog
Но процесс мне кажется малоуправляемым. Именно из-за "построения правильного градиента".

Нуу знаете ли, лично мне истребитель Миг29 тоже кажется малоуправляемым, а профессиональные пилоты жах что вытворяют...

вот вам готовый шаблон - запрягаете свою формулу, и давите принтскрин.

chingachgoog 05.10.2007 14:33

Это похоже как раз мой случай :) :
The way this filter works is explained in documentation very clear, but people still say they do not understand it.

Буду разбираться с примером iNils - упростил его уже дальше нельзя: 4 строчки кода, один градиент... а все равно still do not understand it :)

Код:

import flash.filters.*;
import flash.display.*;

bmp = BitmapData.loadBitmap("displacementMap");
mc.filters = [new DisplacementMapFilter(bmp, new Point(), 4,4, 128, 128, 'color')];


aQuestion 05.10.2007 16:07

потому что всё, что вам следовало бы понять, лежит за пределами этих 4х строчек :(

chingachgoog 05.10.2007 19:17

А что тут понимать? В мануале этого нет. Далеко не сразу понятно, что же такое "смещение по цветам". Думаю кому-нибудь будет интересно:
Берется один из каналов RGBA и смотрится его насыщенность, которая может быть от 0 до 255. (удобно в шопе по каналам смотреть).
Если насыщенность от 0 до 127, то пиксел смещается на уменьшение, если от 128 до 255, то на увеличение.

Но вот пример от от iNils.
Там заранее нарисованный градиент: влево вниз - к черному (к 0), вправо вниз - к белому (к 255).

Вот пример со ссылки от aQuestion, там где Земля вращается.
Там опять-таки заранее нарисованный градиент (круговой).

И если градиент для шарообразной Земли еще можно нарисовать программно, то градиент от iNils программно нарисовать малореально (все же можно, но не за один ход).
Т.е. тут опять многоходовка, просто в примере от iNils (кстати огромное спасибо, очень помог разобраться) многоходовка не интерактивная (заранее в шопе был создан градиент под данную задачу).

aQuestion 05.10.2007 20:14

Цитата:

Сообщение от chingachgoog
А что тут понимать? В мануале этого нет.

Вы, батенька, просто не утруждали себя его чтением.

Черным по белому:
Цитата:

The filter uses the following formula:

dstPixel[x, y] = srcPixel[x + ((componentX(x, y) - 128) * scaleX) / 256, y + ((componentY(x, y) - 128) * scaleY) / 256]

Here is how the DisplacementMapFilter class works. For each pixel (x,y) in the destination bitmap, the DisplacementMapFilter class does the following:
  • Gets the color from (x,y) in the map bitmap
  • Calculates an offset based on that color
  • Looks up that offset location (x+dx,y+dy) in the source bitmap
  • Writes that pixel to the destination(x,y), if boundary conditions permit

Цитата:

Сообщение от chingachgoog
Вот пример со ссылки от aQuestion, там где Земля вращается.
Там опять-таки заранее нарисованный градиент (круговой).

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

Короче говоря, учитесь использовать мозг по назначению.

chingachgoog 05.10.2007 20:58

Цитата:

Сообщение от aQuestion
Вы, батенька, просто не утруждали себя его чтением.

Черным по белому:
dstPixel[x, y] = srcPixel[x + ((componentX(x, y) - 128) * scaleX) / 256, y + ((componentY(x, y) - 128) * scaleY) / 256]
Gets the color from (x,y) in the map bitmap
Calculates an offset based on that color

Я рад за вас, если вы сразу поняли без посторонней помощи, что "color" - это НАСЫЩЕННОСТЬ одного из канала RGBA и что componentX(x, y) - это и есть эта насыщенность в данной точке.

Цитата:

Сообщение от aQuestion
Верно, но если вместо декомпилера воспользоваться мозгами и прочитать текст на соответствующей странице, то можно обнаружить там код, который этот градиент рисует.

Нарисуйте кодом с мозгом или с декомпиллером, градиент iNils-а (а о трапеции вообще речь изначально была)

Цитата:

Сообщение от aQuestion
Короче говоря, учитесь использовать мозг по назначению.

Не считаю это зазорным, а вы?

etc 05.10.2007 23:15

А я вот щас обоим по плюсу влеплю, если будете продолжать в таком тоне.

aQuestion 05.10.2007 23:21

Цитата:

Сообщение от chingachgoog
Нарисуйте кодом с мозгом или с декомпиллером, градиент iNils-а

Хорошо, сколько платите? Или он его в фотошопе нарисовал, по вашему.

єтц, мне уже ваши плюсы цеплять некуда, вся грудь в орденах.

etc 05.10.2007 23:25

Цитата:

Сообщение от aQuestion
єтц, мне уже ваши плюсы цеплять некуда, вся грудь в орденах.

Ну, лимит две штуки, дальше баня.
Так что лучше не устраивать эксцессов.


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

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