-1

在 Flash 中的“填充和描边”选项下,您可以将形状着色为库中的纹理之一。示例:http: //i1.minus.com/iban9aRUCI7UTf.png

如何使用 AS3 代码执行此操作?

4

2 回答 2

1

如果您使用GraphicsAPI 绘图,则可以使用beginBitmapFill

打开库中图像的属性,然后选中 ActionScript 选项卡上的“ Export for ActionScript ”。给它一个类名,例如“ MyTexture ”,然后你可以像这样使用它:

var texturedCircle:Sprite = new Sprite();
texturedCircle.graphics.beginBitmapFill(new MyTexture());
texturedCircle.graphics.drawCircle(0, 0, 100);
于 2013-01-29T15:45:48.923 回答
0

您可以分两步解决此问题。

  1. 根据位图值计算平均颜色。下面的函数(由Soulwire编写)通过循环遍历 BitmapData 对象中的像素,将所有红色、绿色和蓝色值相加,将它们除以像素总数,然后从结果中创建新颜色来执行此操作。”

function averageColour(source:BitmapData):uint {
    var red:Number = 0;
    var green:Number = 0;
    var blue:Number = 0;
    var count:Number = 0;
    var pixel:Number;

    for (var x:int = 0; x < source.width; x++) {
        for (var y:int = 0; y < source.height; y++) {
            pixel = source.getPixel(x, y);

            red += pixel >> 16 & 0xFF;
            green += pixel >> 8 & 0xFF;
            blue += pixel & 0xFF;

            count++
        }
    }

    red /= count;
    green /= count;
    blue /= count;

    return red << 16 | green << 8 | blue;
}

  1. 使用ColorTransform来应用它。

function setColor(obj:Object, color:uint, alpha:Number = 1):void {
    /* Colors the object using uint */

    // Pull the individual primaries
    var r:Number = (color >> 16 ) & 0xFF;
    var g:Number = (color >> 8) & 0xFF;
    var b:Number = color & 0xFF;

    obj.transform.colorTransform = new ColorTransform(0,0,0,alpha,r,g,b,0);
}

于 2013-01-29T15:44:07.203 回答