|
|
||||||
Подробно о TPngImage27.02.2012, 18:23. Показов 10711. Ответов 5
Всем привет
![]() Никак не могу разобраться, как использовать TPngImage в связке с TImage. Встроенная справка на эту тему в Rad XE состоит из нескольких предложений, без примеров и каких бы то ни было подробностей. Статей или литературы тоже не нашел - совсем печально.Если рисовать методом DrawUsingPixelInformation на канве img->Canvas, то рисуется белая заливка и только потом прозрачная png; если рисовать на канве img->Picture->Bitmap->Canvas, то вообще ничего не рисуется. Если же использовать канву промежуточного TBitmap tmp, а потом копировать img->Picture->Bitmap->Assign(tmp), то опять же белая заливка, поверх нее png. Сработали только три способа:
Но потом поверх нарисованного у меня никак не выходит наложить другой png, вот в чем вся загвоздка. Конечная же цель такая: 1) есть у нас новенький TImage - прозрачный, не видать его совсем; 2) рисуем на нем png с частичной прозрачностью, используя альфа-канал каждого пикселя; 3) таким же образом рисуем поверх уже нарисованного еще один png так, чтобы осталось видимым то, что уже нарисовано(условно обзовем это маской); 4) стираем все с канвы TImage, возвращая его в начальное состояние - полная прозрачность. Помогите, кто знает, или, может, литература по теме хорошая есть? Уже задолбался комбинации перебирать ![]() вот тестовый проект, если вдруг кому глянуть захочется...
0
|
||||||
| 27.02.2012, 18:23 | |
|
Ответы с готовыми решениями:
5
TPNGImage TpngImage TPNGImage и TMemoryStream |
|
3956 / 1811 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
|
||||||
| 28.02.2012, 20:13 | ||||||
Сообщение было отмечено как решение
Решение
BRcr, я так понял, основная ваша проблема - это вопрос "как наложить одно изображение на другое"?
Если да, то накидал вам простенький пример:
3
|
||||||
|
|
|||||||||||||||||||||||||||||||||||||||||
| 28.02.2012, 23:17 [ТС] | |||||||||||||||||||||||||||||||||||||||||
Сообщение было отмечено как решение
Решение
Огромное спасибо MikeSoft
за две ключевые подсказки:
Хотя, то, что вы накидали и не сработало в точности, как положено, потребную комбинацию я-таки подобрал и можно подвести итог. Сперва подгружаем картинки png и выставляем им прозрачность:
Вот после этого уже можно использовать метод Bitmap->Canvas->Draw( )для наложения с полупрозрачностью. Хотя в этом месте опять небольшие непонятки. И связаны они с размерами TImage : если не менять размер именно image, а только выставить его Left и Top, то полупрозрачное наложение, как и положено, выполнят все эти методы:
Теперь, если нам требуется убрать наложенную маску png_hover , можно просто снова вызвать копирование:
Если же нужно все затереть, то вызываем img->Picture->Bitmap->SetSize(0,0). Если после этого вызвать копирование img->Picture->Bitmap->Assign( ), то размеры Bitmap, как я уже говорил, установятся в согласие с размерами png и все отобразится. Однако же если попробовать рисовать методом img->Picture->Bitmap->Canvas->Draw( ), то ничего не выйдет, так как этот метод на нулевые размеры Bitmap никак не повлияет. И вот тут вскрывается самая замечательная штука, касательно метода SetSize( ) - если последовательно вызвать:
Поэтому, если работу с TImage надо вести, как предположил MikeSoft, рисованием неких картинок png в разных точках прозрачной канвы, то сперва приходится откопировать на нее либо полностью прозрачную png, либо любую, но потом затереть с помощью SetSize( ). Почему так - не знаю, главное, что работает исправно. Все работает, все чудно Удачи наступившим на те же грабли - вам мучиться уже меньше, чем мне.
3
|
|||||||||||||||||||||||||||||||||||||||||
|
3956 / 1811 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
|
|
| 28.02.2012, 23:27 | |
|
BRcr, я сделал набросок не задумываясь об прозрачности, т.к посчитал что проблема только в наложении двух изображений!
У класса Graphics::TBitmap есть метод CreateMask. Можно было воспользоваться им
0
|
|
|
|
||
| 05.05.2013, 02:31 | ||
|
Ну вообще как я себе представляю все VCL написано на Delphi
0
|
||
| 05.05.2013, 02:31 | |
|
Помогаю со студенческими работами здесь
6
TPNGImage и прозрачность Установка компонента TPngImage TPNGImage -> TBitmap(pf32bit) Изменить уровень прозрачности TPNGImage Ошибка, когда рисую TPNGImage Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Рецензия / Мнение/ Перевод
Сайт называется reddit: The Thinkpad X220 Tablet is the best budget school laptop period.
Это. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|