2010-02-19 68 views

回答

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. 你会用绘画2位图(帆布面料和当前画布)做了一个位图数据BlendMode.DIFFERENCE。
  2. 计算差分位图中的黑色像素。如果像素全是黑色,则没有区别。黑色像素越少,画布上的东西就越多。

HTH, 乔治

1

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

你将不得不检查一个完整的脚本的文档,但这是我的路要走。