如何在Starling中获取纹理的像素值?

时间:2012-12-29 02:01:39

标签: actionscript-3 haxe starling-framework

为了测试我在AS3中使用传统显示层次结构编写的一些图像加载代码,我会确保像素颜色是正确的值。

现在我已经开始将代码移植到Starling,我注意到Texture没有简单的方法来获取像素值。这很不幸,因为这意味着我不得不投入很多好的测试。

我有可能做到这一点吗?比如,我可以以某种方式将Texture转换为BitmapData吗?或者你们有任何其他建议如何测试,以确保我已正确加载图像?

1 个答案:

答案 0 :(得分:2)

事实上,这可能是在有限的一部分案例中(但我需要的那些案例!)。以下代码是Haxe,但希望任何来自AS3背景的人都应该能够以最小的难度进行翻译。

public function getPixel(x:Int, y:Int, sprite: Starling.display.Sprite) : UInt {
    var sw: Int = stage.stageWidth;
    var sh: Int = stage.stageHeight;

    var support:RenderSupport = new RenderSupport();
    RenderSupport.clear(flash.Lib.current.stage.color, 1.0);
    support.setOrthographicProjection(0, 0, sw, sh);
    Fathom.starling.stage.render(support, 1.0);
    support.finishQuadBatch();

    var result:BitmapData = new BitmapData(sw, sh, true);
    Starling.context.drawToBitmapData(result);

    return result.getPixel(Std.int(sprite.x) + x, Std.int(sprite.y) + y);
}

此代码的作用是将在3D上下文中显示的每个对象呈现给result BitmapData。然后,我们从精灵所在位置的BitmapData中获取一个像素。

这并不完美 - 它不考虑旋转,比例等等。它也不考虑sprite是否没有最高深度。但是它有助于测试,如果您需要截取应用/游戏当前状态的屏幕截图,它也可能派上用场。