确定绘图应用程序上剩余的空间

时间:2010-02-19 16:33:04

标签: flash actionscript-3 drawing

我有一个类似http://www.flashperfection.com/tutorials/Mouse-Drawing-in-AS3-96618.html的绘图应用程序,用户可以选择要绘制的画笔大小。 我需要一种方法来确定所有表面都已被绘制。关于如何实现这一目标的任何代码或想法?

2 个答案:

答案 0 :(得分:3)

首先想到的是,假设您的背景(空白画布)是白色的,请在图像中查找白色像素。

类似的东西:

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,则您的像素大多为白色,因此您的画布很清晰。

您可能需要不时地使用draw()方法制作矢量(绘制API生成)画布的BitmapData副本并检查完整画布。

如果您有自定义背景(不是单一颜色),那么您需要稍微不同的方法:

  1. 您可以使用BlendMode.DIFFERENCE绘制2位图(原始画布和当前画布)来制作位图数据。
  2. 计算差异位图中的黑色像素。如果像素都是黑色,则没有区别。黑色像素越少,你在画布上的东西越多。
  3. HTH, 乔治

答案 1 :(得分:1)

我的想法是通过使用像素级碰撞检测来做到这一点。有一些开源框架(try http://www.coreyoneil.com/Flash/CDK/documentation/),它返回一定比例的覆盖率。您可以将绘制的线条与整个曲面进行比较,并检查是否有完整的覆盖范围。

您必须检查文档以获取完整的脚本,但这将是我的方法。