Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex Flex/AS3中位图的位操作_Apache Flex_Actionscript 3 - Fatal编程技术网

Apache flex Flex/AS3中位图的位操作

Apache flex Flex/AS3中位图的位操作,apache-flex,actionscript-3,Apache Flex,Actionscript 3,我希望在Flex/AS3中实现三个位图上的特定位逻辑运算。这可能需要一些DisplayObject blendmodes、ColorMatrix过滤器的组合,可能还有一些我没有想到的东西,因为FLex/As3在像素上没有按位逻辑运算(BlendMode.INVERT除外) 因此,操作如下: (B&S)|(F&S) [其中B、S、F是三个位图] 就这样 顺便说一句,我用Pixel Bender试过了,但难以置信的是,它也没有按位逻辑运算。(你到底在想什么?)。所以我模拟了它们,没有大约50个模和除

我希望在Flex/AS3中实现三个位图上的特定位逻辑运算。这可能需要一些DisplayObject blendmodes、ColorMatrix过滤器的组合,可能还有一些我没有想到的东西,因为FLex/As3在像素上没有按位逻辑运算(BlendMode.INVERT除外)

因此,操作如下:

(B&S)|(F&S)

[其中B、S、F是三个位图]

就这样

顺便说一句,我用Pixel Bender试过了,但难以置信的是,它也没有按位逻辑运算。(你到底在想什么?)。所以我模拟了它们,没有大约50个模和除法,但结果太慢了。(可能是因为我没有支持的graphcs卡,这带来了另一个问题-如果Pixel Bender仅适用于某些卡,那么您如何在运行时从Flex/AS3了解浏览器计算机是否有支持的卡。)


但无论如何,我的主要问题是如何在Flex/AS3中执行上面的小的按位运算。(它必须和BlendModes一样快)。

我对使用逐位操作不是很有经验,但我用新型Flash player 10矢量编写了一个快速测试用例,非常适合这种类型的数据争用

在我的电脑上使用独立的调试播放器以115ms的速度运行2000x2000像素,在发行版播放器中可能会快一点

我不确定这是否足够快,因为我不知道运行它需要多长时间或多大的图像,但这至少可能是一个起点

package  {
    import flash.display.BitmapData;
    import flash.display.Sprite;
    import flash.geom.Rectangle;
    import flash.text.TextField;
    import flash.utils.getTimer;
    /**
     * ...
     * @author Martin Jonasson
     */
    public class Test extends Sprite {

        public function Test() {

            var output:TextField = new TextField();
            output.autoSize = "left";
            addChild(output);

            var bmpB:BitmapData = new BitmapData(2000, 2000, false, 0xff00ff);
            var bmpS:BitmapData = new BitmapData(2000, 2000, false, 0xffffff);
            var bmpF:BitmapData = new BitmapData(2000, 2000, false, 0x000000);

            var rect:Rectangle = new Rectangle(0, 0, 2000, 2000)

            var vecB:Vector.<uint> = bmpB.getVector(rect);
            var vecS:Vector.<uint> = bmpS.getVector(rect);
            var vecF:Vector.<uint> = bmpF.getVector(rect);

            var vecFinal:Vector.<uint> = new Vector.<uint>(vecB.length, true);

            var startTime:int = getTimer();
            for (var i:int = vecB.length - 1; i >= 0; --i) {
                vecFinal[i] = (vecB[i] & vecS[i]) | (vecF[i] & ~vecS[i]);
            }
            output.appendText("bitwise stuff done, took: " + (getTimer() - startTime) + "ms \n");

            startTime = getTimer();
            var bmpFinal:BitmapData = new BitmapData(2000, 2000, false);
            bmpFinal.setVector(rect, vecFinal);
            output.appendText("created bitmapdata, took: " + (getTimer() - startTime) + "ms \n");

        }

    }

}
包{
导入flash.display.BitmapData;
导入flash.display.Sprite;
导入flash.geom.Rectangle;
导入flash.text.TextField;
导入flash.utils.getTimer;
/**
* ...
*@作者马丁·乔纳森
*/
公共类测试扩展了Sprite{
公共功能测试(){
变量输出:TextField=newtextfield();
output.autoSize=“left”;
addChild(输出);
var bmpB:BitmapData=新的BitmapData(2000,2000,false,0xff00ff);
var bmpS:BitmapData=新的BitmapData(2000,2000,false,0xffffff);
var bmpF:BitmapData=新的BitmapData(2000,2000,false,0x000000);
var rect:Rectangle=新矩形(0,0,2000,2000)
var vecB:Vector.=bmpB.getVector(rect);
var-vecS:Vector.=bmpS.getVector(rect);
var vecF:Vector.=bmpF.getVector(rect);
var vecFinal:Vector.=新矢量。(vecB.length,true);
var startTime:int=getTimer();
对于(变量i:int=vecB.length-1;i>=0;--i){
vecbfinal[i]=(vecB[i]和vecS[i])|(vecF[i]和~vecS[i]);
}
appendText(“按位填充完成,执行:”+(getTimer()-startTime)+“ms\n”);
startTime=getTimer();
var bmpFinal:BitmapData=新的BitmapData(2000,2000,false);
bmpFinal.setVector(rect,vectfinal);
appendText(“创建的位图数据,采用:”+(getTimer()-startTime)+“ms\n”);
}
}
}

我对使用逐位操作不是很有经验,但我使用了一款全新的Flash player 10矢量快速编写了一个测试用例,非常适合这种类型的数据争用

在我的电脑上使用独立的调试播放器以115ms的速度运行2000x2000像素,在发行版播放器中可能会快一点

我不确定这是否足够快,因为我不知道运行它需要多长时间或多大的图像,但这至少可能是一个起点

package  {
    import flash.display.BitmapData;
    import flash.display.Sprite;
    import flash.geom.Rectangle;
    import flash.text.TextField;
    import flash.utils.getTimer;
    /**
     * ...
     * @author Martin Jonasson
     */
    public class Test extends Sprite {

        public function Test() {

            var output:TextField = new TextField();
            output.autoSize = "left";
            addChild(output);

            var bmpB:BitmapData = new BitmapData(2000, 2000, false, 0xff00ff);
            var bmpS:BitmapData = new BitmapData(2000, 2000, false, 0xffffff);
            var bmpF:BitmapData = new BitmapData(2000, 2000, false, 0x000000);

            var rect:Rectangle = new Rectangle(0, 0, 2000, 2000)

            var vecB:Vector.<uint> = bmpB.getVector(rect);
            var vecS:Vector.<uint> = bmpS.getVector(rect);
            var vecF:Vector.<uint> = bmpF.getVector(rect);

            var vecFinal:Vector.<uint> = new Vector.<uint>(vecB.length, true);

            var startTime:int = getTimer();
            for (var i:int = vecB.length - 1; i >= 0; --i) {
                vecFinal[i] = (vecB[i] & vecS[i]) | (vecF[i] & ~vecS[i]);
            }
            output.appendText("bitwise stuff done, took: " + (getTimer() - startTime) + "ms \n");

            startTime = getTimer();
            var bmpFinal:BitmapData = new BitmapData(2000, 2000, false);
            bmpFinal.setVector(rect, vecFinal);
            output.appendText("created bitmapdata, took: " + (getTimer() - startTime) + "ms \n");

        }

    }

}
包{
导入flash.display.BitmapData;
导入flash.display.Sprite;
导入flash.geom.Rectangle;
导入flash.text.TextField;
导入flash.utils.getTimer;
/**
* ...
*@作者马丁·乔纳森
*/
公共类测试扩展了Sprite{
公共功能测试(){
变量输出:TextField=newtextfield();
output.autoSize=“left”;
addChild(输出);
var bmpB:BitmapData=新的BitmapData(2000,2000,false,0xff00ff);
var bmpS:BitmapData=新的BitmapData(2000,2000,false,0xffffff);
var bmpF:BitmapData=新的BitmapData(2000,2000,false,0x000000);
var rect:Rectangle=新矩形(0,0,2000,2000)
var vecB:Vector.=bmpB.getVector(rect);
var-vecS:Vector.=bmpS.getVector(rect);
var vecF:Vector.=bmpF.getVector(rect);
var vecFinal:Vector.=新矢量。(vecB.length,true);
var startTime:int=getTimer();
对于(变量i:int=vecB.length-1;i>=0;--i){
vecbfinal[i]=(vecB[i]和vecS[i])|(vecF[i]和~vecS[i]);
}
appendText(“按位填充完成,执行:”+(getTimer()-startTime)+“ms\n”);
startTime=getTimer();
var bmpFinal:BitmapData=新的BitmapData(2000,2000,false);
bmpFinal.setVector(rect,vectfinal);
appendText(“创建的位图数据,采用:”+(getTimer()-startTime)+“ms\n”);
}
}
}
到葡萄柚:

在我的系统上,1000X1000个位图的刷新时间为47毫秒,因此这看起来非常有希望(通过一些调整接近标准刷新率)

我首先学习了Flex2,所以不知道向量,向量显然只是高效的单类型数组

我需要在某个时候开始关注它,因为这个论坛太棒了(自从我10天前第一次发现它以来,在一些相当模糊的问题上,我是4对4。)

再次感谢。

葡萄柚:

在我的系统上,1000X1000个位图的刷新时间为47毫秒,因此这看起来非常有希望(通过一些调整接近标准刷新率)

我首先学习了Flex2,所以不知道向量,向量显然是非常高效的