2010-03-18 67 views
1

問題:下面的代碼會使Flash崩潰... 爲什麼?getPixel/32上的Flash/ActionScript3崩潰

所述的碰撞引起線似乎是


//變種的UIColor:UINT = bmpd.getPixel(I,J);
var uiColor:uint = bmpd.getPixel32(i,j);
trace(「Color:」+ 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); 
+1

當你說「崩潰閃光燈」時,你的意思是什麼? – grapefrukt

+0

只需在fla中運行代碼,它對我來說一切正常。我在Mac上運行CS4。看起來它更像是一個flash-ide /環境問題,而不是代碼問題。 –

+0

是的,你的意思是一個Vista x64的問題。我已經放棄提交bug報告,我仍然需要做其他事情;-)) –

回答

1

已解決。

有一次3個問題:
1,具有透明性,所以只有GetPixel32工作
2. mcMyClip.width &高度返回錯誤值mcMyClip.getBounds(mcMyClip).WIDTH &高度返回正確的值(因爲原始的動畫片段是一個調整大小的)
3. 800x600圖片= 480'000點* 1眨眼的瞬間消息,這是崩潰的原因(實際上可能是Vista問題...)

+0

對於#0,0x000000與0x0000000完全相同。也相當於:0x0,0,(24/6-9 + 5)。對於#1,您可以在不透明的BitmapData上調用getPixel,但它不會爲您提供alpha數據。 – aaaidan

+0

對於#2,您可以在BitmapData.draw()調用中爲matrix參數傳遞mcMyClip.transform.matrix。 – aaaidan

+0

對於#3,試試如果(i%16 == 0 && i%16 == 0){trace(...); } //只跟蹤每256個像素 – aaaidan

0

沒有,如果是這樣簡單,但你bmdp.width - 1在嘗試了循環條件的想法?

+0

nope,<寬度正確 –

-1

BitMapData的構造函數使用ARGB顏色值(例如,0x00000000 - 八位數)作爲其第四參數,而不是RGB值(例如0x000000 - 六位數)。也許這就是你的問題:你還沒有提供Alpha通道值。

+2

將0追加到0x0不會更改其值;它仍然是0. –

+0

@TC:哈哈,真的。 –

1

getPixel調用是否工作,而不是getPixel32?什麼是沙盒情況?你有足夠的「權限」作爲數據訪問位圖嗎?也許你需要一個LoaderContext傳遞給加載圖像的Loader?您是否已經追蹤/調試了位圖數據大小以查看它實際上有多大?