Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   Надо сделать crop как в фотошопе (http://www.flasher.ru/forum/showthread.php?t=62609)

Sh@man 31.08.2004 18:42

Надо сделать crop как в фотошопе
 
Мне во флеше необходимо реализовать работу инструмента Crop точно так как он сделан в фотошопе, т.е. при выделении области картинки остается видима только эта область, а остальная часть затеняется, видны бегущие пунктиры, квадратики и т.д.
Может кто уже делал такое? Подскажите функции.
Thnx

Flasham 01.09.2004 19:09

Привет!

После того как выделена область, скриптом:

1. создаеш пустой клип с depth > того где картинка, т.е. размещаеш его над кортинкой.

2. в этом клипе ресуеш 4 прямоугольника кот. будут закрывать "обрезанную" часть картинку, например серого цвета.

3. устанавливаеш альфа данного клипа на 50%.


Бегущую линию - можно например сделать клип с 1-й линией, в кото будет проигроватся анимация. Причем данный клип должен иметь маску в кач-ве мувиклипа и заданным именем, а также иметь максимально возможную длинну. ПОтом береш этот клип и дублируеш его 4 раза и размещаеш слева, сверху,справа, снизу. А размер его регулируется маской.

Такие варианты первыми пришли в голову.

Удачи

Sh@man 01.09.2004 19:33

Э-э-э неее. Я не то имел в виду. Мне надо все скриптом сделать. Т.е. загружаем картинку, а затем выделяем мышью область картинки и чтоб выделение производилось динамически как в фотошопе - с такими же эффектами и т.д.

sergwizard 02.09.2004 03:16

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

Sh@man 02.09.2004 17:46

А где его искать этого Silin(a) ?

Sh@man 02.09.2004 17:54

А в принципе то что ты сделал - очень неплохо. Спасибо.

sergwizard 03.09.2004 19:18

Вложений: 1
Вот так, наверное, интереснее будет. Но есть одна проблема: все хорошо, если делаешь выделение стандартным способом – сверху-слева вниз-вправо. Если в других направлениях, - получается лажа.
Надо прописывать дополнительные условия. Будет время, - поправлю. Если еще желающих не найдется. :)

Штрек 03.09.2004 20:13

Вложений: 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

Sh@man 03.09.2004 20:23

Ай, молодца.... Очень неплохо получается.

Штрек 03.09.2004 20:45

Цитата:

Оригинал написал(а) Sh@man
Ай, молодца.... Очень неплохо получается.
Чего молодца - давай код оптимизируй...
Если б не надо было б учитывать границы картинки при выделении - было бы 10 строчек, а так вот пришлось в лоб условия прописывать. Надеюсь Нокс мимо не пройдёт, поможет сократить писанину... :p

sergwizard 04.09.2004 02:41

Вложений: 1
О, я вижу Штрек подключился. Здорово Михалыч.
Вот это ты наворотил. :) Сомневаюсь, что кто-то сможет оптимизировать твой код, - уж слишком все заморочено.
В принципе, красиво, но тоже есть недостатки: дополнительные символы в библиотеке, при скалировании мувика, изменяются размеры штрихов (нехорошо это).
Вот, я еще наваял вариант. Глянь-ка глазом молодым.

Sh@man 04.09.2004 14:33

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

sergwizard 04.09.2004 15:47

Вложений: 1
Ну-у-у..., тогда вот это попробуй.

Штрек 04.09.2004 20:16

Цитата:

Оригинал написал(а) sergwizard
Ну-у-у..., тогда вот это попробуй.
Ещё малёхо и можно в Adobe рулить 9ку ваять... :p

Sanik 04.09.2004 22:30

Цитата:

и наложение тени на невыделенную область - и будет как раз то что надо
И будет супер... (особенно картинки в сэмплы Фотошопа 9 обязательно добавить... :D )

Sh@man 06.09.2004 11:45

и еще вопрос: как реализовать пропорциональную работу инструмента выделения? Т.е. наподобие когда делаешь выделение с зажатым Shift'ом. Например, задаю x=2, y=3 и исходя из этого надо сделать чтоб отношение ширины выделения к высоте было всегда 2/3.

sergwizard 06.09.2004 14:33

Блин, ты – вообще-то – хоть что-нибудь сделаешь сам? Или ты хочешь, чтобы все сделали за тебя? Неужели тебе западло просто посидеть, подумать…
Создай объект, слушающий нажатие и отпускание клавиши SHIFT и, в зависимости от этого, меняющий какую-то переменную (sh) на true или false. Потом пропиши условия, если !sh, то все рисуется, как и рисовалось. Если sh, то endY будет равен не _ymouse, а startY+(endX-startX)*(заданный коэффициент). И дальше - в том же духе.

Sh@man 06.09.2004 14:42

уже сделал сам )

Sh@man 06.09.2004 14:49

В последнее время действительно лень думать. Извини если достал.


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

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