определить, сколько места осталось в приложении для рисования - PullRequest
1 голос
/ 19 февраля 2010

У меня есть приложение для рисования, например http://www.flashperfection.com/tutorials/Mouse-Drawing-in-AS3-96618.html, где пользователь может выбрать размер кисти для рисования. Мне нужен способ определить, что вся поверхность нарисована. Любой код или идеи о том, как это сделать?

Ответы [ 2 ]

3 голосов
/ 19 февраля 2010

Что приходит в голову, это искать белые пиксели на изображении, предполагая, что ваш фон (пустой холст) белый.

что-то вроде:

function getWhiteRatio(bitmapData:BitmapData,rect:Rectangle):Number{
    var numPixels:int = rect.width * rect.height;
    var white:int = 0;
    var pixels:Vector.<uint> = bitmapData.getVector(rect);
    for(var i:int = 0 ; i < numPixels; i++){
        if(pixels[i] == 4294967295) white++;
    }
    return white/numPixels;
}

Эта функция будет возвращать соотношение белых пикселей (количество белых пикселей по отношению к общему количеству пикселей внутри изображения). Если соотношение близко к 1, ваши пиксели в основном белые, поэтому у вас есть чистый холст.

Вам может понадобиться сделать копию BitmapData вашего векторного (сгенерированного API рисования) холста время от времени с помощью метода draw () и проверить наличие полного холста.

Если у вас есть пользовательский фон (не одного цвета), вам потребуется немного другой подход:

  1. Вам бы хотелось получить bitmapData, нарисовав 2 растровых изображения (оригинальный холст и текущий холст) с помощью BlendMode.DIFFERENCE.
  2. Подсчитайте черные пиксели в разностном растровом изображении. Если все пиксели черные, разницы нет. Чем меньше черных пикселей, тем больше материала у вас на холсте.

НТН, George

1 голос
/ 19 февраля 2010

Моя идея состоит в том, чтобы сделать это с помощью обнаружения столкновений на уровне пикселей. Для этого есть несколько структур с открытым исходным кодом (попробуйте http://www.coreyoneil.com/Flash/CDK/documentation/),, который возвращает процент покрытия. Вы можете сравнить нарисованные линии со всей поверхностью и проверить, есть ли полное покрытие.

Вы должны были бы проверить документацию для полного сценария, но это был бы мой путь.

...