Рисование текста на BitmapData в Flex

Ну, проблема может быть простой, но я не могу понять. У меня есть изображение, загруженное в BitmapData. теперь я хочу взять текст из текстового ввода и поместить его в 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