![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вывод текста через Canvas.TextOut
Lines © (2008-07-18 18:11:00)Существует светодиодная панель, имеющая некоторое разрешение, на этой панели соответственно можно зажигать или гасить определенные светодиоды. Например, в транспорте светодиодные бегущие строки с названиями остановок и прочее.
Но в данном случае панель управляется компьютером, есть задача выводить на эту панель текст. Чтобы не придумывать собственные шрифты решено рисовать на TBitmap с помощью Canvas.TextOut текст, а потом попиксельно считывать получившееся изображения для передачи на устройство.
Но есть такое понятие как мигание символов, то есть по таймеру то на панель передается изображение со всеми символами, то передается изображение, где мигающие символы не прорисованы, возникает эффект мигания символов. При этом символы, которые не мигают должны статично оставаться на своих местах.
То есть, сразу вывести весь текст с помощью TextOut нельзя, все символы прорисуются.
Другой вариант - прорисовывать отдельно каждый символ, каждый раз сдвигая позицию вывода вправо на TextWidth от символа. При этом произойдет эффект затирания для некоторых шрифтов (думаю, кто знает - сталкивался с проблемой).
Другой вариант - выводить строчку сразу всю, где символы которые не нужно выводить заменены на пробелы. Тоже не вариант, так как символы имеют не постоянную ширину и в результате все "поедет".
Кто какие знает варианты решения проблемы?
P.S. Переиначив задачу скажу так:
Как вывести некую строку текста, притом чтобы не выводились определенные символы в строке, но оставшиеся видимые символы были на том же месте, на котором они бы были, если эти не отображаемые символы бы выводили. ;)
korneley (2008-07-19 10:06:00) [21]Вообще не понял, в чем, собственно проблема.
> Существует светодиодная панель, имеющая некоторое разрешение,
> на этой панели соответственно можно зажигать или гасить
> определенные светодиоды
Ну так и надо контроллеру панели дать соответствующие указания на вкл/выкл диода по его местоположению и в соответствии с его (контроллера) логикой. Бегущая строка реализуется именно средствами конроллера, а не компа с ним сопряженного. Шрифты - моноширинные (8х13 и 6х8 дос-овские очень для табло подходят, если надо могу бмп-шку прислать) Всё, что красиво выглядит на форме/окне - как правило на табло - полное... нечитаемое. :) Вывод делаю в результате использования одного и того же табло 192х96. Использовалось для спорт.гимнастики (windows - шрифты, не я :) а затем на чемпионате России по вольной борьбе (моноширинные - я :) Всеми было отмечена лучшая читаемость на табло, именно, более "древних" шрифтов :))
Мигание для табло - вообще вещь непонятная. Это следствие или неправильной работы самого табло (с контроллером на пАру), или неудачного протокола обмена. У меня 18432 диода, управление через COM, 57600 bps(!) Не мигают. Правда обмен раз в секунду :)))
wl (2008-07-19 02:27:00) [22]> [7] Пробегал2.... (18.07.08 20:32)
> эффект затирания, это когда рисование следующего отдельного
> символа может затирать часть предыдущего.
>
> Например, возьмите шрифт Tahoma размера 11 и сделайте типа
> такого:
>
> Canvas.TextOut(x,y, '0');
> inc(x, Canvas.TextWidth('0')) ;
> Canvas.TextOut(x,y, '0');
>
> нарисуется два нуля. Но можно заметить, что второй ноль
> немного затрет правую границу первого нуля.
> Это не тоже самое, что сделать: Canvas.TextOut(x, y, '00')
> ;
а что, индент между буквами сделать религия не позволяет?
Германн (2008-07-19 01:16:00) [23]
> Lines (18.07.08 20:27) [6]
>
> {RASkov} © (18.07.08 19:32) [2]
> Самое простое это - моноширный шрифт
>
> понятное дело, что для моноширных шрифтов проблемы не существует.
> Но она существует для других видов шрифтов. Например, Tahoma,
> который достаточно при этом красиво выглядит на светодиодном
> дисплее.
>
> Но есть такое понятие как мигание символов, то есть по таймеру
> то на панель передается изображение со всеми символами,
> то передается изображение, где мигающие символы не прорисованы,
> возникает эффект мигания символов. При этом символы, которые
> не мигают должны статично оставаться на своих местах.
>
>
Может не надо извращений?
antonn (2008-07-19 00:58:00) [24]не понял проблемы... если вывод будет идти на светодиодную панель с совсем конкретными размерами букв в пикселях, то было бы разумнее изначально нарисовать весь алфавит, загружать буковки в битмап и потом через canvas.copyrect() выводить каждую букву там где надо.
ковыряния с моноширинными буквами трутайповых шрифтов - это баловство получается.
Тын-Дын (2008-07-18 21:56:00) [25]А гасить все символы перед выводом новых не получится?
Zeqfreed (2008-07-18 21:18:00) [26]Есть у меня чувство, что при выводе можно задать режим прозрачного фона и все будет ништяк. Вот помнится мне что-то такое там было.
Пробегал2.... (2008-07-18 20:32:00) [27]эффект затирания, это когда рисование следующего отдельного символа может затирать часть предыдущего.
Например, возьмите шрифт Tahoma размера 11 и сделайте типа такого:
Canvas.TextOut(x,y, '0');
inc(x, Canvas.TextWidth('0')) ;
Canvas.TextOut(x,y, '0');
нарисуется два нуля. Но можно заметить, что второй ноль немного затрет правую границу первого нуля.
Это не тоже самое, что сделать: Canvas.TextOut(x, y, '00');
Lines (2008-07-18 20:27:00) [28]{RASkov} © (18.07.08 19:32) [2]
Самое простое это - моноширный шрифт
понятное дело, что для моноширных шрифтов проблемы не существует. Но она существует для других видов шрифтов. Например, Tahoma, который достаточно при этом красиво выглядит на светодиодном дисплее.
{RASkov} © (18.07.08 19:32) [2]
Иначе посимвольно, где "пустое место" это символ цветом фона...
wl © (18.07.08 19:36) [3]
а зачем цвет фона, если его можно просто скипнуть
читаем пост:
Lines (18.07.08 18:11)
Другой вариант - прорисовывать отдельно каждый символ, каждый раз сдвигая позицию вывода вправо на TextWidth от символа. При этом произойдет эффект затирания для некоторых шрифтов (думаю, кто знает - сталкивался с проблемой).
Lines (2008-07-18 20:27:00) [29]Удалено модератором
Примечание: Дубль...
{RASkov} (2008-07-18 19:45:00) [30]ну в принципе да...)
wl (2008-07-18 19:36:00) [31]а зачем цвет фона, если его можно просто скипнуть
{RASkov} (2008-07-18 19:32:00) [32]Самое простое это - моноширный шрифт.
Иначе посимвольно, где "пустое место" это символ цветом фона...
wl (2008-07-18 18:28:00) [33]а если тупо использовать моноширинный шрифт? или делать отступ, на основании ширины каждого отдельного символа (вроде должна быть такая фишка)