我有一个类似http://www.flashperfection.com/tutorials/Mouse-Drawing-in-AS3-96618.html的绘图应用程序,用户可以选择要绘制的画笔大小。 我需要一种方法来确定所有表面都已被绘制。关于如何实现这一目标的任何代码或想法?
答案 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副本并检查完整画布。
如果您有自定义背景(不是单一颜色),那么您需要稍微不同的方法:
HTH, 乔治
答案 1 :(得分:1)
我的想法是通过使用像素级碰撞检测来做到这一点。有一些开源框架(try http://www.coreyoneil.com/Flash/CDK/documentation/),它返回一定比例的覆盖率。您可以将绘制的线条与整个曲面进行比较,并检查是否有完整的覆盖范围。
您必须检查文档以获取完整的脚本,但这将是我的方法。