2012-06-27 163 views
2

我想使用Loader(變量名稱是faceimage)讀取圖像,並試圖將該圖像的bitmapdata傳遞給名爲detect的函數。但是,它在我嘗試獲取位圖的行中失敗。bitmapdata.draw失敗默默

bmpTarget = new Bitmap(new BitmapData(faceImage.width, faceImage.height, false)) 
    bmpTarget.bitmapData.draw(faceImage); // Fails, no errors shown 
    detector.detect(bmpTarget.bitmapData); 

我通過在跟蹤語句的上面和下面放置一條線來縮小到這條線。 faceImage包含我通過在屏幕上顯示內容來驗證的有效數據。我也試過

bmpTarget = Bitmap(BitmapData(faceImage.content)) 

但徒然。我在這裏做錯了什麼?

回答

1

它可能是一個沙箱/跨域問題。某些跨域設置禁止將加載的圖像的內容繪製到bitmapData。您可以通過使用URLLoader加載原始圖像數據,然後在Loader上使用loadBytes來解決此問題。

+0

其實我從我的本地文件系統的那一刻加載圖像。跨域問題仍會出現嗎?我試過這段代碼,但它似乎仍然失敗。 –

1

正如注意到: Why do Loader objects kill bitmapdata draw();?

你可能需要一個LoaderContext

loader.load("http://www.example.com/myimage.jpg", new LoaderContext(true)); 

否則,您可以加載來自其他網站的圖片,但不能訪問實際的位圖數據,其中draw()需要。

+0

我現在實際上是從我的本地文件系統加載鏡像。我試過這段代碼,但它似乎仍然沒有工作:-( –

1

我不知道你是否試圖訪問bitmapdata之前已被加載?

也許嘗試使用一個完整的聽衆......

var _urlRequest:URLRequest = new URLRequest("urlToImage"); 
var faceImage:Loader = new Loader; 
faceImage.load(_urlRequest); 
faceImage.addEventListener(IOErrorEvent.IO_ERROR, function(e:IOErrorEvent):void{ trace(e) }); 
faceImage.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded, false, 0, true); 

function imageLoaded(e:Event):void { 

faceImage.contentLoaderInfo.removeEventListener(Event.COMPLETE, imageLoaded); 
var bmpTarget:Bitmap = e.target.content; 
detector.detect(bmpTarget.bitmapData); 
}