Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Инструмент в PhotoShop - Smudge Tool, а во флеш возможно это сделать? (http://www.flasher.ru/forum/showthread.php?t=124268)

KiL33 25.04.2009 10:20

Инструмент в PhotoShop - Smudge Tool, а во флеш возможно это сделать?
 
Заинтересовал такой вопрос.
В фотошопе есть инструмент Smudge Tool – это палец, который размазывает картинку, как угодно. Во флеше это можно сделать? и как это сделать, если это возможно?

VVall 25.04.2009 10:52

Изображение должно быть в растре. Один из алгоритмов описан здесь: http://www.losingfight.com/blog/2007...d-stamp-tools/

KiL33 25.04.2009 14:43

Ого, а это на каком языке реализованно?
Код:

- (void) render:(CGLayerRef)canvas at:(NSPoint)point
...

В принципе благодаря статье картина стала чуть яснее.:)

VVall 25.04.2009 14:48

Вроде Objective-C под Mac, но это без разницы - там главное общая идея, которая описана в начале.

etc 25.04.2009 15:41

KiL33, Objective-C.

silin 26.04.2009 00:11

http://silin.fatal.ru/#AS3/filters/smudge
AS3, но ничего принципиально 9чного, DisplacementMapFilter есть и в 8-ке

KiL33 27.04.2009 14:51

Вложений: 1
Используя статейку, хелп и пример от silin кое-что получилось. Конечно вариант silin куда эффектнее и реалистичней.
Может, кто ни будь, подскажет, как сделать ещё чуть более похоже на то, как енто сделал silin..кому не лень помочь?)
Ещё никак не могу понять почему не получается размывать полностью картинку не зависимо от того что кисть пересекла картинку?

VVall 27.04.2009 15:14

Так у silin'а выложен исходник, разве этого недостаточно?

KiL33 27.04.2009 16:05

н-даг я и пытался по примеру silin'а делать, только на as2

KiL33 30.04.2009 17:22

Вложений: 1
Есть возможность использовать картинку для размытия не из библиотеки, а загруженную?
Все недопонимания упираются в эту строчку кода
var origbmp = flash.display.BitmapData.loadBitmap("blue-box-car");
Так как loadBitmap производит загрузку только из библиотеки, я не могу использовать внешний файл.
Есть какие-нибудь ещё варианты?
моя не удачная попытка:

iNils 30.04.2009 18:01

Загрузить в мувиклип и через draw перегнать в BitmapData

KiL33 03.05.2009 15:12

Вложений: 1
На 99% реализовал редровинг, чтоб всё намалёванное можно было стереть и вернуть картинки прежний вид. Редровинг пашет, когда картинку берём из библиотеки, а когда картинку грузим, не хочет работать.
В коде есть закомментированный код, если его разкоментить то картинка будет грузиться из библиотеки.
Код AS1/AS2:

var myBrush;
var brushSize = 40;
var brushoffset = brushSize/2;
var myPoint = new flash.geom.Point(0, 0);
var myMatrix = new flash.geom.Matrix();
var brushcolor = new flash.geom.ColorTransform();
brushcolor.alphaMultiplier = 0.3;
 
var mcl:MovieClipLoader = new MovieClipLoader();
mcl.addListener(this);
drw.createEmptyMovieClip("container",this.getNextHighestDepth());
mcl.loadClip("blue-box-car.jpg",drw.container);
 
function onLoadInit(source_mc:MovieClip):Void
{
        drawbmp = new flash.display.BitmapData(source_mc._width, source_mc._height, true, 0);
        drawbmp.draw(source_mc);
        startSmudge();
        }
function startSmudge()
{
//Вытащенную картинку из библиотеки мы можем вернуть в прежнее состояние.       
 
/*var source_mc = flash.display.BitmapData.loadBitmap("blue-box-car");
var drawbmp = new flash.display.BitmapData(source_mc.width, source_mc.height, true, 0);
drawbmp.draw(source_mc);*/

 
var smudgebmp = new flash.display.BitmapData(brushSize, brushSize, true, 0);
var smudgeimgbmp = smudgebmp.clone();
var redrawbmp = smudgebmp.clone();
drw.container._x = 84;
 
drw.container.attachBitmap(drawbmp, 1);
 
smudge_btn.onPress = function(){
        myBrush = "smudge";
}
 
redraw_btn.onPress = function(){
        myBrush = "redraw";
}
 
function go(shape_mc){
        smudgebmp.fillRect(smudgebmp.rectangle, 0);
        smudgebmp.draw(shape_mc, myMatrix, brushcolor);
        redrawbmp.fillRect(redrawbmp.rectangle, 0);
        redrawbmp.draw(shape_mc);
}
 
drw.container.onPress = function(){
        if (myBrush == "smudge") this.onMouseMove = brushMouseMove;
        else if (myBrush == "redraw") this.onMouseMove = brushRedrawMouseMove;
        this.onMouseMove(true);
}
 
drw.container.onRelease = drw.container.onReleaseOutside = function(){
        delete this.onMouseMove;
}
 
function brushMouseMove(ignoreimage){
        var offset = new flash.geom.Point(drw.container._xmouse - brushoffset, drw.container._ymouse - brushoffset);
        var drawRect = new flash.geom.Rectangle(offset.x, offset.y, brushSize, brushSize);
        if (!ignoreimage){
                drawbmp.copyPixels(smudgeimgbmp, smudgeimgbmp.rectangle, offset, smudgebmp, myPoint, true);
        }
        smudgeimgbmp.copyPixels(drawbmp, drawRect, myPoint);
        updateAfterEvent();
}
function brushRedrawMouseMove(){
        var offset = new flash.geom.Point(drw.container._xmouse - brushoffset, drw.container._ymouse - brushoffset);
        var drawRect = new flash.geom.Rectangle(offset.x, offset.y, brushSize, brushSize);
        //!Вот здесь косяг
        drawbmp.copyPixels(source_mc, drawRect, offset, redrawbmp, myPoint, true);
        //!
        updateAfterEvent();
}
 
smudge_btn.onPress();
go(brush);
}


KiL33 06.05.2009 08:09

Вложений: 1
Проблемы с возвратом картинки прежнего вида методом copyPixels.


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

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