Flash/ActionScript3在getPixel/32上崩溃

Flash/ActionScript3在getPixel/32上崩溃,flash,actionscript-3,actionscript,Flash,Actionscript 3,Actionscript,问题:下面的代码崩溃flash。。。 为什么? 造成撞车的线路似乎很安全 //变量uiColor:uint=bmpd.getPixel(i,j); 变量uiColor:uint=bmpd.getPixel32(i,j); 痕迹(“颜色:+uiColor”); 我试着拍一张电影唇的快照,然后迭代图像中的所有像素,得到像素的颜色 import flash.display.BitmapData; import flash.geom.*; function takeSnapshot(mc:

问题:下面的代码崩溃flash。。。 为什么?

造成撞车的线路似乎很安全


//变量uiColor:uint=bmpd.getPixel(i,j);
变量uiColor:uint=bmpd.getPixel32(i,j);
痕迹(“颜色:+uiColor”);

我试着拍一张电影唇的快照,然后迭代图像中的所有像素,得到像素的颜色

import flash.display.BitmapData;
import flash.geom.*;


function takeSnapshot(mc:MovieClip):BitmapData 
{
var sp:BitmapData = new BitmapData(mc.width, mc.height, true, 0x000000);
sp.draw(mc, new Matrix(), new ColorTransform(), "normal");
return sp;
}

var mcMyClip:MovieClip=new MovieClip()
var xxx:cMovieClipLoader=new cMovieClipLoader(); 

xxx.LoadImageAbsSize(mcMyClip,"http://localhost/flash/images/picture.gif", 500,500)

//this.addChild(mcMyClip);

function WhenImageIsLoaded()
{
var bmpd:BitmapData=takeSnapshot(mcMyClip);

var i,j:uint;

for(i=0; i < bmpd.width;++i)
{
    for(j=0; j < bmpd.height;++j)
    {
        //var uiColor:uint = bmpd.getPixel(i,j);
        var uiColor:uint = bmpd.getPixel32(i,j);
        trace("Color: "+ uiColor);
    }
}


var myBitmap:Bitmap = new Bitmap(bmpd);



this.addChild(myBitmap);
}

setTimeout(WhenImageIsLoaded,1000);
导入flash.display.BitmapData;
导入flash.geom.*;
函数takeSnapshot(mc:MovieClip):位图数据
{
var sp:BitmapData=新的BitmapData(mc.width,mc.height,true,0x000000);
sp.draw(mc,新矩阵(),新颜色变换(),“法线”);
返回sp;
}
var mcMyClip:MovieClip=新的MovieClip()
var xxx:cMovieClipLoader=新的cMovieClipLoader();
xxx.LoadImageAbsSize(mcMyClip,“http://localhost/flash/images/picture.gif", 500,500)
//这是addChild(mcMyClip);
函数WhenImageIsLoaded()
{
var bmpd:BitmapData=takeSnapshot(mcMyClip);
变量i,j:uint;
对于(i=0;i
不知道它是否像这样简单,但是您是否尝试过在for循环条件中使用
bmdp.width-1

不知道它是否像这样简单,但是您是否尝试过在for循环条件中使用
bmdp.width-1
位图数据的构造函数将ARGB颜色值作为其第四个参数(例如0x00000000--八位数字),而不是RGB值(例如0x000000--六位数字)。这可能是您的问题:您没有提供Alpha通道值。

位图数据的构造函数将ARGB颜色值(例如0x00000000--八位数字)而不是RGB值(例如0x000000--六位数字)作为其第四个参数。这可能是您的问题:您没有提供Alpha通道值。

getPixel调用有效,而getPixel32无效吗?沙箱情况如何?您是否有足够的“权限”要将位图作为数据访问?可能需要LoaderContext传递给正在加载图像的加载程序?是否跟踪/调试位图数据大小以查看其实际大小?

getPixel调用有效而getPixel32无效?沙盒情况如何?是否有足够的“权限”要将位图作为数据访问?可能需要LoaderContext传递给正在加载图像的加载程序?是否跟踪/调试位图数据大小以查看其实际大小?

已解决。

同时出现了3个问题:
1.它具有透明度,因此只有GetPixel32工作
2.mcMyClip.width&height返回错误的值mcMyClip.getBounds(mcMyClip)。width&height返回正确的值(因为原始movieclip是调整大小的)
3.800x600图片=480'000点*1瞬间跟踪消息,这是导致崩溃的原因(实际上可能是Vista问题…

已解决。

同时出现了3个问题:
1.它具有透明度,因此只有GetPixel32工作
2.mcMyClip.width&height返回错误的值mcMyClip.getBounds(mcMyClip)。width&height返回正确的值(因为原始movieclip是调整大小的)

3.800x600图片=480'000点*1瞬间跟踪消息,这是导致崩溃的原因(实际上可能是Vista问题…)

你说“崩溃flash”是什么意思?只是在fla中运行了代码,对我来说一切都很好。我在mac上运行了CS4。这看起来更像是flash ide/环境问题,而不是代码问题。是的,你是说Vista x64问题。我已经放弃了提交错误报告,我还需要做其他事情;-)你能发布堆栈跟踪吗?您可以在启用调试的情况下发布它吗?这将告诉你错误发生在哪一行。你说“崩溃flash”是什么意思?只是在fla中运行了代码,对我来说一切都很好。我在mac上运行CS4。与其说是代码问题,不如说是flash ide/环境问题。是的,你指的是Vista x64问题。我已经放弃了提交bug报告,我还需要做其他事情;-))你能发布堆栈跟踪吗?您可以在启用调试的情况下发布它吗?这将准确地告诉您错误发生在哪一行上;它仍然是0。将0追加到0x0不会更改其值;它仍然是0。对于#0,0x000000与0x0000000完全相同。也相当于:0x0,0,(24/6-9+5)。对于#1,可以对不透明的BitmapData调用getPixel,它只是不提供alpha数据。对于#2,可以在BitmapData.draw()调用中传递矩阵参数的mcMyClip.transform.matrix。对于#3,如果(i%16==0&&i%16==0){trace(…)},请尝试//仅每256次跟踪一次pixel@aaaidan:我不久前发现:我使用的MovieClip只有Alpha数据(没有颜色,一切都是0,0,0,只有Alpha值不同)!对于#0,0x000000与0x0000000完全相同。也相当于:0x0,0,(24/6-9+5)。对于#1,可以对不透明的BitmapData调用getPixel,它只是不提供alpha数据。对于#2,可以在BitmapData.draw()调用中传递矩阵参数的mcMyClip.transform.matrix。对于#3,如果(i%16==0&&i%16==0){trace(…)},请尝试//仅每256次跟踪一次pixel@aaaidan:我不久前发现:我使用的MovieClip只有Alpha数据(没有颜色,一切都是0,0,0,只有Alpha值不同)!