Форум 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)
-   -   Обрезка по маске (http://www.flasher.ru/forum/showthread.php?t=139073)

greenhill 22.04.2010 18:03

Обрезка по маске
 
Привет всем!
Подскажите, пожалуйста, как обрезать картинку по маске.
Не только чтоб была видна просто зона где была наложена маска, но и края обрезались
скажем, картинка шириной в 600пкс, маска - 200. и обрезать по маске так чтоб картинка стала тоже 200.
Может как-то отслеживать цвета? Прозрачную область обрезать?
Подкиньте идею:)

coreras 22.04.2010 18:24

a.setMask(b),
где a - клип, который надо увидеть, b - маска, через которую ты его увидишь.
попробуй, может тебе и отслеживать ничего не понадобится :о)

greenhill 22.04.2010 18:32

ну это понятно, понимаете, я потом делаю ресайз этого клипа, и маркеры увеличения и уменьшения становятся по ширине исходной картинки, а мне надо чтоб уже было приближенно к маскируемой части(видимой). получается что есть 100х100 видимая область и маркеры от нее на 300 пикселов дальше из-за того что картинка не обрезалась :)

udaaff 22.04.2010 19:10

В BitmapData#copyPixels(), есть опциональные параметры:
Код:

..., [alphaBitmap:BitmapData], [alphaPoint:Point], [mergeAlpha:Boolean])
Копируйте кусок исходного изображение по прямоугольной области маски в обрезанное изображение, и в опциональных параметрах указывайте битмапдату своей маски в качестве alphaBitmap.
Также copyChannel() можно альфа-канал скопировать.

greenhill 27.04.2010 17:58

не совсем понятно как это применить..

udaaff 27.04.2010 18:30

Код AS1/AS2:

import flash.display.BitmapData;
import flash.geom.*
 
// На сцене лежат два мувика mask и image.
mask._visible = false;
image._visible = false;
 
var imageBitmap:BitmapData = new BitmapData(image._width, image._height, true, 0x00000000)
imageBitmap.draw(image);
 
var maskBitmap:BitmapData = new BitmapData(mask._width, mask._height, true, 0x00000000);
maskBitmap.draw(mask);
 
var maskedBitmap:BitmapData = new BitmapData(mask._width, mask._height, true, 0x00000000);
 
maskedBitmap.copyPixels(imageBitmap,
        new Rectangle(mask._x, mask._y, mask._width, mask._height),
        new Point(0, 0), maskBitmap, new Point(0, 0));
 
// Выводим результат
var result:MovieClip = createEmptyMovieClip("result", 0);
result.attachBitmap(maskedBitmap, 0);


greenhill 28.04.2010 21:16

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

как скопировать альфаканал?
можно ли имея прозрачное изображение с зеленым кругом посредине, скопировать именно область где зеленый круг, обрезая прозрачные края?

udaaff 28.04.2010 21:36

Цитата:

у меня там постоянно меняются координаты а из-за этого несоответствие получается.
Второй параметр в copyPixels() задает область, которая должна быть скопирована, т.е. её координаты, ширину и высоту.

Цитата:

как скопировать альфаканал?
Те же яйца, только сбоку. Если вас вариант с copePixels не устроил, то и этот тоже не устроит. Ну а скопировать — copyChannel()

greenhill 28.04.2010 21:38

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

udaaff 28.04.2010 21:55

getColorBoundsRect() — область цвета


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

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