![]() |
Надо сделать crop как в фотошопе
Мне во флеше необходимо реализовать работу инструмента Crop точно так как он сделан в фотошопе, т.е. при выделении области картинки остается видима только эта область, а остальная часть затеняется, видны бегущие пунктиры, квадратики и т.д.
Может кто уже делал такое? Подскажите функции. Thnx |
Привет!
После того как выделена область, скриптом: 1. создаеш пустой клип с depth > того где картинка, т.е. размещаеш его над кортинкой. 2. в этом клипе ресуеш 4 прямоугольника кот. будут закрывать "обрезанную" часть картинку, например серого цвета. 3. устанавливаеш альфа данного клипа на 50%. Бегущую линию - можно например сделать клип с 1-й линией, в кото будет проигроватся анимация. Причем данный клип должен иметь маску в кач-ве мувиклипа и заданным именем, а также иметь максимально возможную длинну. ПОтом береш этот клип и дублируеш его 4 раза и размещаеш слева, сверху,справа, снизу. А размер его регулируется маской. Такие варианты первыми пришли в голову. Удачи |
Э-э-э неее. Я не то имел в виду. Мне надо все скриптом сделать. Т.е. загружаем картинку, а затем выделяем мышью область картинки и чтоб выделение производилось динамически как в фотошопе - с такими же эффектами и т.д.
|
Вложений: 1
Может быть, не самый лучший вариант, но напрягаться сейчас - просто лень, и спать хочется. Позови Silin(a), он любит и умеет такие вещи до ума доводить.
|
А где его искать этого Silin(a) ?
|
А в принципе то что ты сделал - очень неплохо. Спасибо.
|
Вложений: 1
Вот так, наверное, интереснее будет. Но есть одна проблема: все хорошо, если делаешь выделение стандартным способом – сверху-слева вниз-вправо. Если в других направлениях, - получается лажа.
Надо прописывать дополнительные условия. Будет время, - поправлю. Если еще желающих не найдется. :) |
Вложений: 1
Да уж Силин бы сделал конфетку. :p
У меня вот что получилось - есть мув с пунктирным квадратом и линкаге - Ну а дальше всё просто /относительно/ - xf = foto._x; yf = foto._y; xc = cont._x; yc = cont._y; _root.onMouseDown = function() { limit_foto = foto.getBounds(this); foto.setMask(null); if (!knopka.hitTest(_root._xmouse, _root._ymouse, false)) { foto._x = xf; foto._y = yf; cont._x = xc; cont._y = yc; x1 = _root._xmouse; y1 = _root._ymouse; _root.onEnterFrame = function() { cont.attachMovie("punktir", "punktir", 1); with (cont) { if (x1>=limit_foto.xMin && x1<=limit_foto.xMax) { if (_root._xmouse>=limit_foto.xMin && _root._xmouse<=limit_foto.xMax) { _x = x1+(_root._xmouse-x1)/2; _xscale = Math.abs(_root._xmouse-x1); } else if (_root._xmouse<limit_foto.xMin) { _x = limit_foto.xMin+(x1-limit_foto.xMin)/2; _xscale = Math.abs(x1-limit_foto.xMin); } else if (_root._xmouse>limit_foto.xMax) { _x = x1+(limit_foto.xMax-x1)/2; _xscale = Math.abs(x1-limit_foto.xMax); } } else if (x1<limit_foto.xMin) { if (_root._xmouse>=limit_foto.xMin && _root._xmouse<=limit_foto.xMax) { _x = limit_foto.xMin+(_root._xmouse-limit_foto.xMin)/2; _xscale = Math.abs(limit_foto.xMin-_root._xmouse); } else if (_root._xmouse<limit_foto.xMin) { _x = limit_foto.xMin; _xscale = 0; } else if (_root._xmouse>limit_foto.xMax) { _x = (limit_foto.xMax+limit_foto.xMin)/2; _xscale = Math.abs(limit_foto.xMax-limit_foto.xMin); } } else if (x1>limit_foto.xMax) { if (_root._xmouse>=limit_foto.xMin && _root._xmouse<=limit_foto.xMax) { _x = limit_foto.xMax+(_root._xmouse-limit_foto.xMax)/2; _xscale = Math.abs(limit_foto.xMax-_root._xmouse); } else if (_root._xmouse<limit_foto.xMin) { _x = (limit_foto.xMax+limit_foto.xMin)/2; _xscale = Math.abs(limit_foto.xMax-limit_foto.xMin); } else if (_root._xmouse>limit_foto.xMax) { _x = limit_foto.xMax; _xscale = 0; } } if (y1>=limit_foto.yMin && y1<=limit_foto.yMax) { if (_root._ymouse>=limit_foto.yMin && _root._ymouse<=limit_foto.yMax) { _y = y1+(_root._ymouse-y1)/2; _yscale = Math.abs(_root._ymouse-y1); } else if (_root._ymouse<limit_foto.yMin) { _y = limit_foto.yMin+(y1-limit_foto.yMin)/2; _yscale = Math.abs(y1-limit_foto.yMin); } else if (_root._ymouse>limit_foto.yMax) { _y = y1+(limit_foto.yMax-y1)/2; _yscale = Math.abs(y1-limit_foto.yMax); } } else if (y1<limit_foto.yMin) { if (_root._ymouse>=limit_foto.yMin && _root._ymouse<=limit_foto.yMax) { _y = limit_foto.yMin+(_root._ymouse-limit_foto.yMin)/2; _yscale = Math.abs(limit_foto.yMin-_root._ymouse); } else if (_root._ymouse<limit_foto.yMin) { _y = limit_foto.yMin; _yscale = 0; } else if (_root._ymouse>limit_foto.yMax) { _y = (limit_foto.yMax+limit_foto.yMin)/2; _yscale = Math.abs(limit_foto.yMax-limit_foto.yMin); } } else if (y1>limit_foto.yMax) { if (_root._ymouse>=limit_foto.yMin && _root._ymouse<=limit_foto.yMax) { _y = limit_foto.yMax+(_root._ymouse-limit_foto.yMax)/2; _yscale = Math.abs(limit_foto.yMax-_root._ymouse); } else if (_root._ymouse<limit_foto.yMin) { _y = (limit_foto.yMax+limit_foto.yMin)/2; _yscale = Math.abs(limit_foto.yMax-limit_foto.yMin); } else if (_root._ymouse>limit_foto.yMax) { _y = limit_foto.yMax; _yscale = 0; } } xxx = _x; yyy = _y; _parent.fl = true; } }; } }; _root.onMouseUp = function() { xsmesch = foto._x-xxx; ysmesch = foto._y-yyy; delete _root.onEnterFrame; }; knopka.onPress = function() { foto.setMask(cont); if (fl) { foto._x += xsmesch; foto._y += ysmesch; cont._x += xsmesch; cont._y += ysmesch; } fl = false; }; Очень надеюсь на помошь Нокса в оптимизации кода. :p |
Ай, молодца.... Очень неплохо получается.
|
Цитата:
Если б не надо было б учитывать границы картинки при выделении - было бы 10 строчек, а так вот пришлось в лоб условия прописывать. Надеюсь Нокс мимо не пройдёт, поможет сократить писанину... :p |
Вложений: 1
О, я вижу Штрек подключился. Здорово Михалыч.
Вот это ты наворотил. :) Сомневаюсь, что кто-то сможет оптимизировать твой код, - уж слишком все заморочено. В принципе, красиво, но тоже есть недостатки: дополнительные символы в библиотеке, при скалировании мувика, изменяются размеры штрихов (нехорошо это). Вот, я еще наваял вариант. Глянь-ка глазом молодым. |
sergwizard, это здорово получилось. Я еще добавлю ограничение на область выделения, т.е. чтоб только картинку можно было выделять и наложение тени на невыделенную область - и будет как раз то что надо.
Спасибо. |
Вложений: 1
Ну-у-у..., тогда вот это попробуй.
|
Цитата:
|
Цитата:
|
и еще вопрос: как реализовать пропорциональную работу инструмента выделения? Т.е. наподобие когда делаешь выделение с зажатым Shift'ом. Например, задаю x=2, y=3 и исходя из этого надо сделать чтоб отношение ширины выделения к высоте было всегда 2/3.
|
Блин, ты – вообще-то – хоть что-нибудь сделаешь сам? Или ты хочешь, чтобы все сделали за тебя? Неужели тебе западло просто посидеть, подумать…
Создай объект, слушающий нажатие и отпускание клавиши SHIFT и, в зависимости от этого, меняющий какую-то переменную (sh) на true или false. Потом пропиши условия, если !sh, то все рисуется, как и рисовалось. Если sh, то endY будет равен не _ymouse, а startY+(endX-startX)*(заданный коэффициент). И дальше - в том же духе. |
уже сделал сам )
|
В последнее время действительно лень думать. Извини если достал.
|
| Часовой пояс GMT +4, время: 07:55. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.