Каталог статей
Рисуем буквам
Всем привет. Это мой второй урок на просторах этого форума.
Итак, начнем. Наша задача – научиться рисовать буквами. Flash будим использовать для преобразования Битмапы в буквы, как не парадоксально это звучит… Было:
Предполагаю, что вы знакомы с основами AS 3.0 и поэтому приступаю к коду: Импорты всего что нам потребуется:
- КОД:
CODE
//без коментариев import flash.display.MovieClip; import flash.events.MouseEvent; import flash.events.Event; //я пользуюсь этим классом для загрузки обычно, или LoaderMax import br.com.stimuli.loading.BulkLoader; import br.com.stimuli.loading.BulkProgressEvent; //без коментариев import flash.display.Bitmap; import flash.display.BitmapData; //обращаю внимание на формат текста! Это важно, т.к. разные буквы имеют разную //ширину в стандартных шрифтах, но не в консольных. Просто если не соблюдать это правило, //то текст «поплывет» import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.text.TextFormat;
Далее идет конструктор и первая функция – загрузки картинки (предполагается, что она лежит по адресу pixToSimbol/main.jpg) с помощью bulk-loader.
- КОД:
CODE public function MainClass() { pixToSrtingModulStart(); }
private function pixToSrtingModulStart():void { contayner = new MovieClip(); addChild(contayner); loader = new BulkLoader("picToStringLoad"); loader.add("pixToSimbol/main.jpg", {id:"pic"});
loader.addEventListener(BulkProgressEvent.PROGRESS, onPixToStrProgress); loader.addEventListener(BulkLoader.COMPLETE, onPixToStrLoaded);
loader.start(); }
Далее идет обработчики событий загрузки и на рабочую область добавляется ранее заготовленные элементы .
Для моего приложения необходима соблюдать инструкцию, . Это связанно с тем, что у меня распознается два типа пикселей светлее 0x555555 и темнее (вы можете сделать больше! ). Это сделано из-за того, что сохраненная картинка в .jpg не будет четко состоять из черных и белых пикселей, это отчетливо видно при приближении. На границах цветов появляются промежуточные сглаживающие оттенки. Далее слушатели загрузки:
- КОД:
CODE private function onPixToStrProgress(e:BulkProgressEvent):void { trace(e.loadingStatus()); }
private function onPixToStrLoaded(e:Event):void { var picBitmap:Bitmap = loader.getBitmap("pic"); picBitmap.x = (stageW - picBitmap.width) /2; picBitmap.y = 100;
contayner.addChild(picBitmap);
picToStrDesign = new PicToStrDesign(); picToStrDesign.x = stageW / 2; picToStrDesign.y = 20;
picToStrDesign.whiteInp.maxChars = 1; picToStrDesign.blackInp.maxChars = 1;
picToStrDesign.convertToStrBTN.addEventListener(MouseEvent.CLICK, convertToString);
contayner.addChild(picToStrDesign); }
Ну и самое интересное:
- КОД:
CODE private function convertToString(e:MouseEvent):void { if (picToStrDesign.blackInp.text == "") { picToStrDesign.blackInp.text = "Ж"; } if (picToStrDesign.whiteInp.text == "") { picToStrDesign.whiteInp.text = "."; }
var bitmapToConvert:BitmapData = loader.getBitmapData("pic",true); var str:String = new String(); var strWhite:String = picToStrDesign.whiteInp.text; var strBlack:String = picToStrDesign.blackInp.text;
for (var i:uint = 0; i<bitmapToConvert.height; i++) { for (var j:uint = 0; j<bitmapToConvert.width; j++) {
var currColor:uint = bitmapToConvert.getPixel(j,i);
if (currColor < 0x555555) { str += strBlack; } else { str += strWhite; } } str += "\n"; }
var outputText:TextField = new TextField(); outputText.autoSize = TextFieldAutoSize.LEFT; outputText.text = str;
var format:TextFormat = new TextFormat(); format.font = "Lucida Console"; format.size = 6;
outputText.setTextFormat(format);
outputText.x = (stageW - outputText.width)/2;
while (contayner.numChildren>0) { contayner.removeChildAt(0); }
contayner.addChild(outputText); loader.clear(); }
Расскажу про ключевой код: bulk-loader возвращает битмапДату – и мы бежим по всем её пикселам и создаем строку, в которую добавляем в зависимости от цвета пиксела – символ. Вот и всё. Надеюсь вы смогли сделать .
|
Категория: flash | Добавил: mikel (12.12.2010)
|
Просмотров: 570
| Рейтинг: 0.0/0 |
Добавлять комментарии могут только зарегистрированные пользователи. [ Регистрация | Вход ]
|
Статистика
В сети всего: 1 Гостей: 1 Пользователей: 0
|