Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Объединение нескольких изображений в одно с добавлением текста [D7, WinXP]


seregka ©   (2005-06-10 12:16:00) 

Добрый день!

Подскажите, пожалуйста, как объединить несколько изображений в одно. Например, два изображение 800х600. Нужно на выходе одно 800х600, сверху 800х300 - первое, под ним 800х300 - второе.

И как добавить текст в произвольной части изображения.

Заранее благодарен


Grief   (2005-06-11 19:25:00) [1]

мерцать не будет, если не объединять картинки перед выводом. Тем более, что второй способ имхо будет медленнее


Борыч   (2005-06-11 17:18:00) [2]

Можно пойти разными путями..

1. Представить слои как наследники TGraphicControl. Это довольно легко в реализации, но работать бдеть отвратительно: когда слоев будет достаточно много, перерисовка будет тормозить или сильно мерцать..

2. Имеем в памяти битмап размером с клиентскую область. На нём уникальными цветами (!) в виде примитивов соответствующих слоям (текст - закрашенный прямоугольник) рисуем все слои, один за другим (те, которые видны на экране). На другом битмапе (тоже размером с видимую область) уже прорисовываем реальное изображение слоев с прозрачностью, текстурами, текстом и т.п. Этот растр и выводим на экран. Главное, чтобы координаты соответствующих слоев на одном и другом растре совпадали. Далее обрабатываем события мыши: смотрим по первому битмапу, на какой цвет пришелся клик курсором. А коли мы знаем, что каждому слою соответствует уникальный цвет, то и знаем какой слой выделять (активировать). Если это текст, можно включать обработку нажатия клавиш, показывать мерцающий курсор и т.д. Перемещение слоя - по тому же принципу. По сути ничего сложного нет. Но можно реализовать так, что будет все летать, а можно так, что страшно тормозить. Дело опыта. :)


seregka   (2005-06-11 11:49:00) [3]

Не подскажите как?


Борыч   (2005-06-11 00:00:00) [4]

>seregka  (10.06.05 23:31) [4]

Можно.


seregka   (2005-06-10 23:31:00) [5]

спаисибо.
А не подскажите, а можно ли сделать слои (как в Фотошопе), чтобы этот текст можно было двигать и менять?


Борыч   (2005-06-10 22:50:00) [6]

>seregka  (10.06.05 22:23) [2]

Brush.Style := bsClear;


seregka   (2005-06-10 22:23:00) [7]

СПасибо.
А как сделать, чтобы задний фон текст прозрачным был


XProger   (2005-06-10 13:16:00) [8]


Canvas.Draw(0, i*300, bmp);
...
Canvas.TextOut(X, Y, 'labuda');


Наверх

Титульная страница Поиск, карта сайта Написать письмо