Воскресенье, 28.04.2024, 14:19
Приветствую Вас Гость | RSS

Сайт посвящен анимации

Каталог статей

Главная » Статьи » flash [ Добавить статью ]

Рисуем буквам
Всем привет. Это мой второй урок на просторах этого форума.

Итак, начнем. Наша задача – научиться рисовать буквами. 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
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Меню сайта
Форма входа
Категории раздела
anime studio ( MOHO) [2]
статьи про anime studio ( MOHO)
Poser [1]
все статьи про Poser
flash [5]
статьи для flash
3d max [11]
все о 3d max
TVPaint Animation (Mirage) [1]
Все о TVPaint Animation (Mirage)
Toon Boom [1]
статьи Toon Boom
Paint [4]
статьи о Paint
Photoshop [14]
статьи для Photoshop
Maya [2]
Другое [1]
Все другое об анимации и рисование!
Поиск
Мини-чат
200
Статистика

В сети всего: 1
Гостей: 1
Пользователей: 0
Друзья
JimBot and Counter Strike (www.apokalipses2012.ucoz.ru) SuPeR_NiK
Счетчика
Яндекс.Метрика