Начертайте текст върху BitmapData във Flex

Е, проблемът може да е прост, но не мога да го разбера. Имам изображение, заредено в BitmapData. сега искам да взема текст от textinput и да го поставя в BitmapData. По принцип това е изчертаване на текст върху BitmapData и получаване на резултата като друг BitmapData, който ще се състои от оригиналния BitmapData с текст, начертан върху него на определена позиция. Какъв е най-добрият начин да постигнете това във flex?


person redGREENblue    schedule 20.05.2011    source източник
comment
Опитвате ли се да поставите воден знак/промените самото оригинално изображение или просто да покажете някакъв текст върху изображението във вашето приложение?   -  person Jason Towne    schedule 21.05.2011
comment
Не точно воден знак. Просто искам да добавя текста върху BitmapData и да го запазя като напълно ново изображение (с изображението и текста). Така че да, променете оригиналното изображение, като добавите текст към него.   -  person redGREENblue    schedule 21.05.2011


Отговори (2)


За да поставите текста в растерно изображение, можете да направите:

var channelName:TextField = new TextField();
channelName.textColor=0x000000;
channelName.antiAliasType = AntiAliasType.NORMAL;
channelName.alpha=1.0;
var txtFormat:TextFormat = new TextFormat("SansSerif",14,0x000000,true);
channelName.setTextFormat(txtFormat);

var bitmapdata:BitmapData = new BitmapData(
         channelName.width, channelName.height, true, 0x000000);
bitmapdata.draw(channelName);
person alicia    schedule 23.05.2011
comment
Благодаря, работи. Въпреки това, каквото и да правя, текстът се появява в горния ляв ъгъл на изображението Bitamp (0,0), как мога да го накарам да се показва където пожелая върху изображението Bitmapdata? - person redGREENblue; 23.05.2011
comment
Можете да използвате матрица и метода за превод: help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/ - person alicia; 24.05.2011

Не можете да рисувате върху растерни данни за една дума, но можете да ги композирате от данните. Тъй като имате BitmapData, е достатъчно лесно да го промените на растерно изображение (var bitmap:Bitmap = new Bitmap(bitmapData);) и след това да го добавите като източник за изображение.

След като вече имате действително изображение на сцената, вече можете да добавите текст над него, като използвате каквото искате (текст, етикет, текстово поле и т.н.) и след това можете да направите Bitmap.draw над размерите на изображението, за да върнете информацията за пикселите в BitmapData (под Bitmap.bitmapData).

person J_A_X    schedule 20.05.2011
comment
Звучи добре. Възможно е обаче да имам проблем по отношение на моите изисквания с този подход (не съм сигурен обаче). BitmapData е с големи размери и се намалява, когато го заредя в изображение, за да пасне на размерите на изображението. Ако преобразувам това растерно изображение в BitmapData и го запазя, няма ли да е с размерите на изображението (т.е. умалено изображение), как мога да запазя оригиналното измерение в този случай? - person redGREENblue; 21.05.2011
comment
Опитвали ли сте да добавите контролата на изображението, но не сте задали ширината и височината на контролата? - person michael; 21.05.2011
comment
да Но проблемът тук е изискването на приложението за зареждане на различни изображения по време на изпълнение. Така че част от изображението може да е с по-висока разделителна способност, която трябва да бъде намалена, за да пасне на областта на изображението, но докато се записва, трябва да се запази в оригиналния размер. Ако не задам ширината/височината на изображението, изображение с по-големи размери ще изтече от зоната за показване, ако мога да го обясня правилно. Какво решение мога да използвам? - person redGREENblue; 21.05.2011
comment
Какво ще кажете за използването на ImageSnapshot за запазване на компонента. - person michael; 23.05.2011