Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   узнать квадрат непрозрачной части кадра (http://www.flasher.ru/forum/showthread.php?t=208815)

climfree 02.09.2014 15:09

узнать квадрат непрозрачной части кадра
 
Здравствуйте!

Помогите, поалуйста, решить такую задачку.
Есть спрайт в котором анимация где в первом кадре спрятан мувик длительностью 15 кадров. в каждом кадре изображение может быть разного размера. вот как имея только этот спрайт узнать у какой картинки самый большой квадрат непрозрачной части?

мувик пока не добавляю. если нужно - скину и его.

старалась объяснить более понятно, не знаю как получилось))

Zebestov 02.09.2014 15:22

Повесить слушатель на ENTER_FRAME этого 15-кадрового мувика, в каждом кадре брать его getBounds() и производить проверку по критериям "самый большой квадрат" и запоминать нового победителя (номер кадра, сами габариты, что там еще).

ChuwY 02.09.2014 15:51

getBounds дает не слишком точные результаты, тк прозрачные элементы тоже учитывает.
Я для выбора оптимальных областей для растеризации клипов использую
bmd.getColorBoundsRect(0xFF000000, 0xFF000000).
Сначала, естественно, нужно растеризовать кадр.

Навскидку примерно так:

Код AS3:

function getFrameBoundsList(mc:MovieClip):Vector.<Rectangle>
{
        var numFrames:int = mc.totalFrames;
        var list:Vector.<Rectangle> = new Vector.<Rectangle>();
 
        for(var i:int = 1; i <= numFrames; i++)
        {
                var frameRect:Rectangle;
 
                mc.gotoAndStop(i);
 
                frameRect = getPixelBounds(mc);
 
                list.push(frameRect);
        }
 
        return list;
}
 
function getPixelBounds(sprite:Sprite):Rectangle
{
        var rect:Rectangle;
        var resRect:Rectangle;
        var bmd:BitmapData;
        var matrix:Matrix;
 
        rect = sprite.getBounds(sprite);
 
        if(!rect.width || !rect.height)
        {
                return rect;
        }
 
        matrix = new Matrix();
        matrix.tx = -Math.floor(rect.x);
        matrix.ty = -Math.floor(rect.y);
 
        var resW:int = Math.ceil(rect.width);
        var rewH:int = Math.ceil(rect.height);
 
        bmd = new BitmapData(resW, rewH, true, 0x0);
        bmd.draw(sprite, matrix);
 
        resRect = bmd.getColorBoundsRect(0xFF000000, 0xFF000000);
 
        return rect;
}



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

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