Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Реальные размеры объекта TextField (http://www.flasher.ru/forum/showthread.php?t=97958)

Friday13 03.07.2007 20:06

Реальные размеры объекта TextField
 
Как вычислить реальные размеры текстового поля, чтобы они соответствовали Break Apart этого тектового поля.
Не могу прикрепить пример, говорит загрузка прошла неудачна.

вот код


Код:

for (var z in this) {
        if (this[z] instanceof TextField) {
                var my_fmt:TextFormat = this[z].getTextFormat()
                var metrics:Object = my_fmt.getTextExtent(this[z].text);
                this[z].autoSize = "left";
                var wdth = metrics.width;
                var hght = metrics.height;
                var x = this[z]._x;
                var y = this[z]._y;
                this.lineStyle(0.25, 0x00ee00)
                this.moveTo(x, y);
                this.lineTo(x + wdth, y);
                this.lineTo(x + wdth, y + hght);
                this.lineTo(x, y + hght);
                this.lineTo(x, y);
               
                var wdth = this[z]._width;
                var hght = this[z]._height;
                var x = this[z]._x;
                var y = this[z]._y;
                this.lineStyle(0.25, 0xff0000)
                this.moveTo(x, y);
                this.lineTo(x + wdth, y);
                this.lineTo(x + wdth, y + hght);
                this.lineTo(x, y + hght);
                this.lineTo(x, y);
               
                var wdth = this[z].textWidth;
                var hght = this[z].textHeight;
                var x = this[z]._x;
                var y = this[z]._y;
                this.lineStyle(0.25, 0x0000ff)
                this.moveTo(x, y);
                this.lineTo(x + wdth, y);
                this.lineTo(x + wdth, y + hght);
                this.lineTo(x, y + hght);
                this.lineTo(x, y);
        }
}

Чтобы заработал, создайте в Stage несколько тектовых полей с заембеденными символами, тип поля dynamic.

etc 04.07.2007 14:03

Можно попробовать с помощью BitmapData…

Friday13 04.07.2007 14:35

Можно. Я пробовал, есть одна проблема. Мне эти данные нужно на сервер передать чтобы сервер отрисовал у себя такую же надпись. А если я передам "..." (текст в ковычках) , то верхней левой точкой будут не корректные координаты.

etc 04.07.2007 14:40

А что мешает отправить сам текст в BitmapData?

chingachgoog 04.07.2007 14:41

Вопрос был про размеры а-ля Break Apart.
"..." - определиться точно по размерам, не так ли?
Координаты - другой вопрос.
Насколько я понимаю, они всегда будут +2 пиксела от координат текстового поля.

Friday13 04.07.2007 15:31

давайте мыло, я вышлю пример, залить не получается. пишет ошибка

Цитата:

Сообщение от __etc
А что мешает отправить сам текст в BitmapData?

мешает следующее, есть фонты начертания которых вылазит за границы их размеров. допустим ChinaCyr, Dollar, Monotype Corsiva.

Повторяю еще раз, я пробовал через битмапдату. вычислял левую верхнюю точку и правую нижнюю, вариант не подходит.

etc 04.07.2007 15:36

Нет, ты меня не понял — я говорю о том, что отправить весь BitmapData на сервер, прям вместе с текстом.
Зачем отправлять какие-то там координаты и т.п., когда можно готовую картинку отправить?

Friday13 04.07.2007 15:37

Цитата:

Сообщение от chingachgoog
"..." - определиться точно по размерам, не так ли?

у сервера другое мнение какие размеры у надписи аля троеточие :) он почему то считает что они на N пикселей выше от левой верхней точки:)

Цитата:

Сообщение от __etc
Нет, ты меня не понял — я говорю о том, что отправить весь BitmapData на сервер, прям вместе с текстом.
Зачем отправлять какие-то там координаты и т.п., когда можно готовую картинку отправить?

опа.. поподробнее пожалуйста? если через BitmapData.getPixel() то получается 4 картинки 280*280 надо отправлять. Или может есть другой способ?

etc 04.07.2007 15:44

Ну да, getPixel, все дела. Отправляем в каком-нибудь удобоваримом виде в php, а он уже соберет картинку и сохранит, например, в JPEG.

Friday13 04.07.2007 15:49

а есть алгоритмы сжатия данных во флеше? а то 280*280*6=470400 байт :(
я конечно понимаю ты можешь подколоть анлимом, но это рассчитанно на пользователей модемов;)

etc 04.07.2007 15:51

Ну, для начала можно бинарно слать, через amfphp, это уже 200 КБ получается. Потом, ты можешь использовать LZW сжатие (соответствующие классы есть). Килобайт 80 будет в итоге…

chingachgoog 04.07.2007 15:52

Цитата:

Сообщение от Friday13
а есть алгоритмы сжатия данных во флеше? а то 280*280*6=470400 байт :(

Тут где-то была ссылка на исходник с таким кодом, надо поиском пройтись.

Friday13 04.07.2007 16:00

не подходит.
спасибо за информацию.

Если кто нибудь может, скажите мне что мне попались глючные фонты, и я успокоюсь:) Только аргументируйте:)))

etc 04.07.2007 16:50

Фонты не глючные. У каждого символа есть определенные рамки и не всегда они совпадают с визуальными размерами символа (точнее, никогда не совпадают).

Friday13 04.07.2007 16:53

А как эти рамки вытащить из символа???

etc 04.07.2007 16:54

Да никак, собственно…

Friday13 04.07.2007 17:00

Я уже ручками пытаюсь найти логику в отношении координат и размеров надписи и ее Break Apart , но пока не нахожу ее.

etc 04.07.2007 17:04

«Логика» зашита в самом файле шрифта.

Friday13 04.07.2007 17:29

Еще бы найти описание как вытащить эту логику из файла шрифта...

etc 04.07.2007 17:46

Никак, в swf есть тег шрифта, самого файла там нет, а все параметры заданы жестко и не доступны для прочтения.

Friday13 04.07.2007 19:10

Да хотябы те что жестко вручную в коде забить константами.

etc 04.07.2007 19:56

Для каждого символа значения отступов и проч. — свои.

iNils 04.07.2007 19:58

Мне не понятно, почему нельзя передать сам текст, его размер, и данные: италик, болд? Серверу должно быть пофиг размеры текстового поля, он лишь построит по этим данным надпись и обрежет лишнее.

Friday13 04.07.2007 20:03

В том то и дело что я так и передаю. но!! на выходе получается не совсем то что нужно. Сервер рисует надпись под обрез, флеш же передает координаты и размеры с учетом отступов TextField . И как вычислить эти отступы я сейчас пытаюсь уяснить.

iNils 04.07.2007 20:15

Причем тут координаты и размеры текстового поля? Я говорю про размер шрифта.

etc 04.07.2007 20:15

Гм, чем BitmapData не угодил? Можно по горизонтали определить строки, в которых только прозрачные пиксели, потом по вертикали…
Изврат, конечно, но как вариант.

iNils 04.07.2007 20:20

Цитата:

Сообщение от __etc
Гм, чем BitmapData не угодил? Можно по горизонтали определить строки, в которых только прозрачные пиксели, потом по вертикали…
Изврат, конечно, но как вариант.

Это не изврат, а второй варинт, который я хотел только что предложить :) если на стороне сервера нельзя определить необходимые размеры для картинки исходя из размеров шрифта.

Friday13 04.07.2007 20:33

Ребята, не подходят эти варианты, я тестил...
Пока выход - сервер будет рисовать с кривыми координатами

iNils 04.07.2007 20:38

Второй вариант не подходит? Чем и почему?

Molecula 04.07.2007 20:59

"Мне эти данные (т.е. текст текстового поля) нужно на сервер передать чтобы сервер отрисовал (что значит отрисовал? данные из флешового текстового поля перенес в форму на странице?) у себя такую же надпись."

Я тоже не пойму, чем этот пример http://www.sephiroth.it/tutorials/fl.../print_screen/
не устраивает?

etc 04.07.2007 22:39

Цитата:

Сообщение от iNils
Это не изврат, а второй варинт, который я хотел только что предложить :) если на стороне сервера нельзя определить необходимые размеры для картинки исходя из размеров шрифта.

То, что ты его хотел предложить, не отменяет извратности :D

iNils 04.07.2007 22:41

Цитата:

Сообщение от __etc
То, что ты его хотел предложить, не отменяет извратности :D

А в чем тут изврат?

etc 04.07.2007 22:42

В общей методике ковыряния в пикселях.

iNils 04.07.2007 23:03

Цитата:

Сообщение от __etc
В общей методике ковыряния в пикселях.

Это почему?

etc 05.07.2007 00:49

Ну я не знаю, на мой взгляд, инструменты для определения размеров шейпа должны быть проще и не заморачиваться на неточных вычислениях количества пикселей с прозрачностью больше нуля и прочим хламом. Сама среда такие инструменты не представила, а подобные решения я считаю реальным извратом (т.е. применить можно, но не в массовом порядке). ИМХО.

iNils 05.07.2007 01:04

Нам много чего не предоставили, и много приходиться писать самим, но это не считается извратом. Флеш не виноват в том, что некоторые шрифты кривые.

etc 05.07.2007 01:23

Гм, где шрифты кривые? textHeight и textWidth возвращают размеры, включая символьные рамки.

iNils 05.07.2007 02:13

Цитата:

Сообщение от __etc
textHeight и textWidth возвращают размеры, включая символьные рамки.

Без рамок. Выдели все символы, возращается размер области, который инвертирован. То есть учитываются метрики шрифта, которых нет, когда делаем Break Apart. Отсюда невозможность определить размеры другим способом. И если задать символу в метрика ширину или высоту меньшую размерам вектора, то флеш в результате выдаст textWidth меньший, чем будет ширина после Break Apart.

Friday13 05.07.2007 09:49

Метод с битмапдата не подходит, потому что пакет отправляемый на сервер не должен превышать 2-5кб за весь сеанс работы флешки.
Я понимаю что при помощи битмапдата я мог бы многое решить, но не подходит:) Именно из-за большого размера пакета.

etc 05.07.2007 09:50

Тогда предложенный выше способ в руки.


Часовой пояс GMT +4, время: 22:49.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.