Просмотр полной версии : Обрезка по маске
greenhill
22.04.2010, 18:03
Привет всем!
Подскажите, пожалуйста, как обрезать картинку по маске.
Не только чтоб была видна просто зона где была наложена маска, но и края обрезались
скажем, картинка шириной в 600пкс, маска - 200. и обрезать по маске так чтоб картинка стала тоже 200.
Может как-то отслеживать цвета? Прозрачную область обрезать?
Подкиньте идею:)
a.setMask(b),
где a - клип, который надо увидеть, b - маска, через которую ты его увидишь.
попробуй, может тебе и отслеживать ничего не понадобится :о)
greenhill
22.04.2010, 18:32
ну это понятно, понимаете, я потом делаю ресайз этого клипа, и маркеры увеличения и уменьшения становятся по ширине исходной картинки, а мне надо чтоб уже было приближенно к маскируемой части(видимой). получается что есть 100х100 видимая область и маркеры от нее на 300 пикселов дальше из-за того что картинка не обрезалась :)
В BitmapData#copyPixels(), есть опциональные параметры: ..., [alphaBitmap:BitmapData], [alphaPoint:Point], [mergeAlpha:Boolean])
Копируйте кусок исходного изображение по прямоугольной области маски в обрезанное изображение, и в опциональных параметрах указывайте битмапдату своей маски в качестве alphaBitmap.
Также copyChannel() можно альфа-канал скопировать.
greenhill
27.04.2010, 17:58
не совсем понятно как это применить..
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
Такой вариант работает, спасибо, но у меня там постоянно меняются координаты а из-за этого несоответствие получается.
как скопировать альфаканал?
можно ли имея прозрачное изображение с зеленым кругом посредине, скопировать именно область где зеленый круг, обрезая прозрачные края?
у меня там постоянно меняются координаты а из-за этого несоответствие получается.
Второй параметр в copyPixels() задает область, которая должна быть скопирована, т.е. её координаты, ширину и высоту.
как скопировать альфаканал?
Те же яйца, только сбоку. Если вас вариант с copePixels не устроил, то и этот тоже не устроит. Ну а скопировать — copyChannel()
greenhill
28.04.2010, 21:38
А можно как-то узнать где на изображении появляется цвет.
Ну например, фон весь белый и узнать на координату точки где начинается другой цвет?
getColorBoundsRect() — область цвета
greenhill
28.04.2010, 22:10
спасибо, попробую
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.