Просмотр полной версии : Как программно можно отрисовать надпись в виде точек
australian incognito
01.10.2009, 00:53
В приложении можно увидеть файл, где я в ручную отрисовал надпись точками размером в 1px. Сейчас есть идея повторить это при помощи кода, но даже не знаю с какой стороны к этому подступиться. Хочется отрисовать, используя мувик в качестве основы, чтобы после был доступ к каждой из точек (в частности к столбцам).
Возможно ли такое с помощью скрипта? Подайте интересных идей, как это реализовать - желательно избежать угловатости у букв (особенно видно на скруглениях). Может где есть урок или примерчик похожий?
Заранее благодарю
Объявить текст маской для мувика с точками:
points.setMask(txt);
Ну вот тут посмотрите:
http://noregret.org/tutor/pixel/
Была еще одна хорошая статья с примером, но не могу сейчас вспомнить, надобности ранее не было, сразу не найду.
если этими точками нужно потом как-то управлять, то можно наплодить мувиков с квадратиками
import flash.display.BitmapData;
import flash.geom.Matrix;
var imageMC:MovieClip = createEmptyMovieClip("mc", 0);
var tf:TextField = createTextField("tf", 1, 0, 0, 0, 0);
tf.autoSize = "left";
tf.text = "TABAK.RU";
tf.setTextFormat(new TextFormat("tahoma", 24, 0x0, true));
var w:Number = tf._width;
var h:Number = tf._height;
var bmd:BitmapData = new BitmapData(w, h);
bmd.draw(tf,new Matrix(),null,null,null,true);
for (var i:Number = 0; i<w*h; i++) {
var x:Number = i%w;
var y:Number = Math.floor(i/w);
addPixel(i,bmd.getPixel(x, y));
}
bmd.dispose();
tf.removeTextField();
function addPixel(i:Number, clr:Number)
{
if (clr == 0xFFFFFF) return;
var pixel:MovieClip = imageMC.createEmptyMovieClip("pixel" + i, i);
var pixelColr = 0xFF0080;
//антиалиасинг
var clrDepth:Number = (clr >> 16) / 0xFF;
var r:Number = pixelColr >> 16 & 0xFF ;
r += (0xFF - r) * clrDepth;
var g:Number = pixelColr >> 8 & 0xFF;
g += (0xFF - g) * clrDepth;
var b:Number = pixelColr & 0xFF;
b += (0xFF - b) * clrDepth;
pixelColr = r << 16 | g << 8 | b;
///////
pixel.beginFill(pixelColr);
pixel.lineStyle(0,0xFFFFFF);
var k:Number = 4;
pixel.lineTo(k, 0);
pixel.lineTo(k, k);
pixel.lineTo(0, k);
pixel.lineTo(0, 0);
pixel.endFill();
pixel._x = k*(i % w);
pixel._y = k*Math.floor(i / w);
}
function getPixel(x:Number, y:Number):MovieClip {
var i = y*w+x;
return imageMC["pixel"+i] || null;
}
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.