|
|
||||||
Подробно о TPngImage27.02.2012, 18:23. Показов 10806. Ответов 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 |
|
3957 / 1812 / 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
|
|||||||||||||||||||||||||||||||||||||||||
|
3957 / 1812 / 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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|