Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   пошаговое считывание из BitmapData (http://www.flasher.ru/forum/showthread.php?t=86794)

AlexSol 23.10.2006 15:02

пошаговое считывание из BitmapData
 
делаю рисовалку, где необходимо передать результат на сервер. считываю данные с BitmapData и заношу массив.
Код:

arr_btn.onRelease = function() {
        t = getTimer();
        var lastColor;
        for (i=0; i<Math.round(clip._height); i++) {
                var leng:Number = 0;
                arrayCss[i] = new Array();
                var index:Number = 0;
                t1 = getTimer();
                lineInfo(i);
        }
        makeAutData(arrayCss);
        trace('-----------------');
        trace(getTimer()-t);
};
function lineInfo(i) {
        for (j=0; j<=Math.round(clip._width); j++) {
                if (j == 0) {
                        lastColor = bitmap.getPixel(j+1, i+1).toString(16);
                }
                var color = bitmap.getPixel(j+1, i+1).toString(16);
                //если тот же цвет
                if (color == lastColor) {
                        //если клетка не последняя
                        if (j != Math.round(clip._width)) {
                                leng++;
                        } else {
                                //если последняя: записываем
                                arrayCss[i][index] = [leng, lastColor];
                        }
                } else {
                        //цвет другой
                        arrayCss[i][index] = [leng, lastColor];
                        leng = 1;
                        index++;
                        lastColor = color;
                }
        }
        trace('i'+i+'::'+(getTimer()-t1));
}

кактинку 300*300 обрабатывает около 3 сек, при этом подвисает и выдает результат trace('i'+i+'::'+(getTimer()-t1)) после того как считывание закончено. Хочется разбить этот процесс на части, чтобы пользователю выводился процент считанной инфы, пока программа думает.

etc 23.10.2006 15:32

Ну, а где вопрос? :D

AlexSol 23.10.2006 15:57

считывание подвешивает флешку. как выводить промежуточный результат считывания? в функцию lineInfo(num) передается номер обрабатываемой строки. как его выводить? trace внутри фунции выдается тока после окончания считывания всей картинки.

etc 23.10.2006 16:19

Трейс выводится вовремя, просто попадает он в аутпут после просчёта всего. Просто так получается.
Нужно цикл по высоте заменить интервалом.

AlexSol 23.10.2006 16:29

>Просто так получается

не так просто... если выводить в текстовое поле - то три секунды тишины а потом номер последней строки.

>Нужно цикл по высоте заменить интервалом
былв такая идея. а вот как этот интервал подобрать? чтобы он примерно соответствовал времени разбора строки?

silin 23.10.2006 16:50

не надо подбирать, поставь 0

etc 23.10.2006 17:07

Да, а оно уж само по времени распределится.

AlexSol 23.10.2006 20:56

перевел на интервал, работает. Процент выполненнного считывания выдается, а вот время считывания увеличилось в два раза, при этом скорость считывания строки таже. Можно ли это исправить? код вышел такой:
Код:

var intervalId:Number;
var count:Number = 0;
var clipH:Number;
var duration:Number = 0;
function executeCallback():Void {
        var leng:Number = 0;
        arrayCss[count] = new Array();
        var index:Number = 0;
        t1 = getTimer();
        lineInfo(count);
        if (count>=clipH) {
                clearInterval(intervalId);
                makeAutData(arrayCss);
                trace('-----------------');
                trace(getTimer()-t);
        }
        count++;
}
arr_btn.onRelease = function() {
        t = getTimer();
        var lastColor;
        clipH = Math.round(clip._height);
        intervalId = setInterval(executeCallback, duration);
};
function lineInfo(i) {
        for (j=0; j<=Math.round(clip._width); j++) {
                if (j == 0) {
                        lastColor = bitmap.getPixel(j+1, i+1).toString(16);
                }
                var color = bitmap.getPixel(j+1, i+1).toString(16);
                //если тот же цвет
                if (color == lastColor) {
                        //усли клетка не последняя
                        if (j != Math.round(clip._width)) {
                                leng++;
                        } else {
                                //если последняя: записываем
                                arrayCss[i][index] = [leng, lastColor];
                        }
                } else {
                        //цвет другой
                        arrayCss[i][index] = [leng, lastColor];
                        leng = 1;
                        index++;
                        lastColor = color;
                }
        }
        tt.text = ''+Math.round(i*100/(clip._height));
        trace('i'+i+'::'+(getTimer()-t1));
}


etc 23.10.2006 21:14

Ну или одно или другое.
Зато ты можешь отобразить процесс.

AlexSol 23.10.2006 22:14

да, могу. с интервалом меня устраивает. просто ситуация интересная.


Часовой пояс GMT +4, время: 17:03.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.