Программно создать Image с прозрачным цветом.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Программно создать Image с прозрачным цветом.

Сообщение Mikle » 10.03.2005 (Чт) 15:59

То есть мне нужно, например, нарисовать мышкой на PictureBox-е нечто, нажать кнопку - и картинка присвоилась Image С УЧЕТОМ ВЫБРАННОГО ПРОЗРАЧНОГО ЦВЕТА.
Как это сделать?
:lol: Сохранение во временный .GIF с последующим LoadPicture не предлагать. :lol:

dimix
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 174
Зарегистрирован: 08.02.2005 (Вт) 22:47

Сообщение dimix » 10.03.2005 (Чт) 20:57

Картинка с прозрачным цветом? Это интересно... Ее же не будет видно... :)
Хотя, если при этом фон будет непрозрачным :roll:
Но тогда это уже обычная картинка с нормальным цветом и прозрачным фоном, все же относительно, не так ли? :wink:

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 11.03.2005 (Пт) 11:50

dimix
Это шутка?
Понятно, что картинка будет разноцветная, и вопрос в том, как сделать прозрачный цвет в Image программно, как это делается при загрузке из GIF.

Inferno
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 179
Зарегистрирован: 26.01.2005 (Ср) 1:06

Сообщение Inferno » 11.03.2005 (Пт) 12:20

В гифах какому-то цвету присваивается прозрачность. И этот цвет при отображении рисунка просто игнорируется.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 11.03.2005 (Пт) 12:23

Не только. В GIF есть и прозрачность по маске.
Lasciate ogni speranza, voi ch'entrate.

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 11.03.2005 (Пт) 13:32

Человеку, похоже, нужен TransparentBlt :roll:

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 11.03.2005 (Пт) 14:50

Человеку, похоже, нужен TransparentBlt

Если я правильно понял, то не совсем то. Нарисовать на форме с использованием прозрачности я могу. Мне нужно программно создать свойство Picture для стандартного Image с прозрачным цветом.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 11.03.2005 (Пт) 20:40

alibek писал(а):Не только. В GIF есть и прозрачность по маске.

Первый раз про это слышу.


2Mikle: ещё раз, что тебе нужно? Создать свойство Picture ты не сможешь - оно уже создано разработчиками VB ;-) Создать объект Picture с прозрачностью ты не сможешь, потому что он эту прозрачность не поддерживает.
Объясни ещё раз, может до меня дойдёт? :-)
Изображение

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 11.03.2005 (Пт) 20:48

М.Б. он хочет создать свой контрол? Т.е. picture со свойством прозрачности? Такой я где-то видел на VBstreets.
Последний раз редактировалось Ariman 11.03.2005 (Пт) 23:28, всего редактировалось 1 раз.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 11.03.2005 (Пт) 21:14

Изображение

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 12.03.2005 (Сб) 11:27

tyomitch
У стандартного контрола Image есть стандартное св-во Picture. Загрузив его из GIF, мы можем получить Image с прозрачным цветом. Но я не могу Загрузить его из GIF, потому, что заранее не знаю его содержимого. Представь Paint.exe, снимаем галочку
"Рисунок\Непрозрачный фон", что-нибудь рисуем, выделяем мышкой фрагмент и ПЕРЕТАСКИВАЕМ. Я хотел это сделать с помощью Image, не создавая новых контролов и не заморачиваясь с API, ведь Image это может.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 12.03.2005 (Сб) 18:33

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

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 12.03.2005 (Сб) 18:37

Mikle писал(а):tyomitch
У стандартного контрола Image есть стандартное св-во Picture. Загрузив его из GIF, мы можем получить Image с прозрачным цветом.

Это неправда. Image 'имитирует' прозрачный цвет, но в его св-ве Picture это никак не сохраняется. Очень легко проверить: если ф-ей PaintPicture рисунок, загруженный из GIF-а с прозрачностью, где-нибудь отрисовать, то он отрисуется полностью - игнорируя прозрачность.

Ещё раз, что надо-то? :-) Прозрачного цвета у объекта Picture быть не может.
Изображение

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 12.03.2005 (Сб) 19:30

А где тогда Image хранит информацию о прозрачных битах? Может это метод PaintPicture не поддерживает прозрачный цвет?
Ещё раз, что надо-то?

Я уж и не знаю, как это еще выразить... даже пример наваял. :roll:

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 12.03.2005 (Сб) 21:18

Да ты цель назови! М.б. можно без этого всего обойтись? Тогда tranparentBlt тебе в руки :wink:

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 13.03.2005 (Вс) 8:41

Код: Выделить всё
PaintPicture не поддерживает прозрачный цвет?

Если вставить wmf файл с прозрачностю тогда рисует. С гифом если даже скопировать картинку в буффер и потом вставить ее другой image появляется сразу фон. Че я только с picture.handle(hBitmap в
даном случае) делал безрезультатно.
الفيجوال بيسك الرابح

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 13.03.2005 (Вс) 11:08

Ariman
Цель - использование в редакторах для визуалтзации Drag&Drop. Например в редакторе для печатных плат, чтобы выделить фрагмент, схватить его мышкой - и тащить, и чтобы тащить не черный квадрат с рисунком, а только сам рисунок - и видеть что под ним! Если tranparentBlt - действительно оптимальный вариант, тогда придется на нем остановиться. Но мне кажется, что проще будет сохранять фрагмент в файл GIF, а затем считывать его в Image, просто это как-то через... :oops: , и еще разбираться в формате GIF.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 13.03.2005 (Вс) 11:49

Хм :)

Во-первых, TransparentBlt на Win98/ME приводит к исчерпанию всех ресурсов системы, причём довольно быстро. Это баг винды.
Во-вторых, для кого есть в кирпичах ImageList, в котором есть специальный режим перетаскивания рисунков? :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 22.03.2005 (Вт) 12:04

Долго не мог понять, о каких кирпичах речь. :lol:
Разобрался - то, что нужно. Только в Win98 не совсем корректно работает. Добавляю в лист новый имедж, затем удаляю и добавляю другой. Если его размер больше первого - выдает ошибку. В WinXP все нормально.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 22.03.2005 (Вт) 16:03

Ты знаешь, у меня как раз 98 :)

Идеология imagelist именно в том, что в нём все картинки одного размера :) Если нужно добавить бОльшую, создавай новый лист, благо есть методы Create именно для этого :)
Так что это by design :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 22.03.2005 (Вт) 16:21

У меня в ИЛ всегда не более одного рисунка, размер каждый раз разный. Каждый раз создавать новый ИЛ? Попробую.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 137

    TopList