![]() |
заменить bitmap.getPixel(x, y)
ребята подскажите, голова уже опухла.
Где то зациклился, не могу понять как работает: threshold() Вычитал на форуме что threshold быстрее определяет цвет пикселя чем getPixel. Сейчас сть картинка bitmap, черно-белая. Требуется определить цвет каждого пиксела(белый или другой). сейчас делаю циклы для перебора каждого пиксела: Код:
bitmap.getPixel(xx, yy);Возможно ли с помошью. threshold() выяснить белого ли цвета пиксель? Как его правильно поставить в цикл, что бы он по пиксельно цвет показывал? |
это вобщем гвозди от разных стенок... а что в итоге нужно сделать?
|
Вообще требуется, по пиксельно собрать MovieClip(640x960px).
Что бы передать через XMLSocket дальше(программе на C++). В MovieClip'е текст и картинки, все черно белое, - они меняются пользователем - то есть динамичные. и после этого требуется передать информацию о составленном в XML Socket(который работает, успешно). Как мне определить цвет каждого пикселя в MovieClip? Я делаю это так: - создаю пустой bitmap, его запихиваю в контейнер, и потом кладу сверху свой MovieClip(при помощи draw()) - в результате у меня получается bitmap с моим рисунком. После этого, я определяю в цикле, по пиксельно цвет каждого пиксела(нужно определить белый или другой-приравнивается к черному), при помощи getPixel(x,y), и заношу в переменную result += "0"; //или "1"; Когда картинка 640х960пикселей, то Flash v8, выдает надпись, типа: "скрипт тормознутый, закончить его?". И так 2-3 раза подряд. При этом времени занимает больше минуты. |
разбить функцию определения цветов по onEnterFrame на несколько блоков
делал такое, только логику определения оптимального количества пикселей для одного фрейма сейчас не вспомню... ну суть такая! |
Код:
var _j=0;Number - The number of pixels that were changed. Итого, мы получаем, сколько у нас Красных, Зеленных, Синих пикселей. Так, можно построить гистограмму, как в Фотопопе. Никаких онЕнтерФреймов! Тут всего лишь 255 операций. Конечно, чем больше битмапдата, тем дольше вычисления. Для черно-белого изображения, всё гораздо проще. Вообще такие вещи, конечно лучше делать примерно, как тут - http://sephiroth.it/tutorials/flashP...php_bytearray/ |
А что мне с этой гистограммой дальше делать?
Требуется получить строку(в байтах или стринг): 0010010100100... где 0 белый(или прозрачный) цвет, а 1 черный (или отличный от белого)цвет. Как на основе гистограммы это можно сделать ? |
Цитата:
Код:
thresholdСсылка, которую я дал - есть хорошее начало для решения Вашей задачи. Цитата:
из АС3 просто аж просится сюда, хотя, возможно, кто-то предложит что-то другое. Для черного и белого: Код:
_b = _bmp.threshold(_bmp, new Rectangle(0, 0, _bmp.width, _bmp.height), new Point(0, 0),"==", 0xFFFFFF, 0xFFFFFFFF, 0xFFFFFF, false);//bВы представляете какой массив передадите? 640 * 960 =614400 этих нулей и едениц. |
зачем передавать массив, если на выходе получим двоичное число? %)
нужно всего лишь знать количество пикселов и результат их последовательного прибавления и сдвига вправо. (но все равно желательно разбить на части, а то очень большие числа получаются). т.е. комбинация "10000" соответствует "f" (или 16). строка из 640 черных пикселов, например, будет равна 4.56244061762219e+192 - не так уж и много как для передачи =) ЗЫ. и все таки, я думаю, что treshold тут ни чем не поможет. Нужно попиксельно перебрать - значит getPixel(). onEnterFrame - вариант, еще вариант - в паблиш сеттингс изменить макимальное время отведенное на работу скрипта (дефолт - 15 сек). |
извините, за тупой вопрос, никогда не работал с onEnterFrame
Можно какой либо пример? |
Код:
import flash.display.BitmapData;Ну, не знаю... в принципе, терпимо %) Нужно еще поэксперементировать с сокетом, и как часто можно реально посылать инфу, возможно, можно все это и быстрее сделать =) |
| Часовой пояс GMT +4, время: 16:14. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.