Flash / ActionScript3 падает на getPixel / 32 - PullRequest
1 голос
/ 18 марта 2010

Вопрос: приведенный ниже код аварийно завершает работу ... Почему?

Строки, вызывающие сбой, кажутся


// var uiColor: uint = bmpd.getPixel (i, j);
var 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);

Ответы [ 4 ]

1 голос
/ 19 марта 2010

решаемая.

Было сразу 3 проблемы:
1. Он имеет прозрачность, поэтому работает только GetPixel32
2. mcMyClip.width & height возвращает неправильное значение mcMyClip.getBounds (mcMyClip) .width & height возвращает правильное значение (поскольку исходный видеоклип является измененным размером)
3. Изображение 800x600 = 480 000 точек * 1 сообщение трассировки в мгновение ока, что является причиной сбоя (возможно, это проблема Vista) ...

1 голос
/ 19 марта 2010

Работает ли вызов getPixel, а не getPixel32? Как выглядит ситуация с песочницей? Достаточно ли у вас «разрешения» для доступа к растровому изображению в качестве данных? Возможно, вам нужен LoaderContext, чтобы передать Loader, который загружает изображение? Вы отслеживали / отлаживали размер растровых данных, чтобы увидеть, насколько он велик?

0 голосов
/ 18 марта 2010

Конструктор для BitMapData принимает в качестве 4-го аргумента значение цвета ARGB (например, 0x00000000 - восемь цифр), а не значение RGB (например, 0x000000 - шесть цифр). Возможно, это ваша проблема: вы не указали значение альфа-канала.

0 голосов
/ 18 марта 2010

Не знаю, насколько это просто, но пробовали ли вы с bmdp.width - 1 в цикле for?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...