Форум 2D Аниматор
Image


Вернуться   Форум 2D Аниматор > Adobe Flash > Adobe Flash > Уроки Adobe Flash

Важная информация

Ответ
 
Опции темы
Старый 26.12.2010, 13:38   #1
Михаил_fet
Заблокирован
 
Регистрация: 30.04.2010
Адрес: Смоленск
Сообщений: 224
Сказал(а) спасибо: 199
Поблагодарили 52 раз(а) в 31 сообщениях
Михаил_fet на пути к лучшему
По умолчанию Урок 2: Рисуем буквами

Всем привет.

Итак, начнем. Наша задача – научиться рисовать буквами. 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(Mo useEvent.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 возвращает битмапДату – и мы бежим по всем её пикселам и создаем строку, в которую добавляем в зависимости от цвета пиксела – символ.
Вот и всё. Надеюсь вы смогли сделать .

Источник урока [Только зарегистрированные пользователи могут видеть ссылки. Нажмите Здесь для Регистрации]
Михаил_fet вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



Текущее время: 02:42. Часовой пояс GMT +5.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.