Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Basic / VBA


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Basic/VBA

Выпуск № 359
от 31.08.2006, 14:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 192, Экспертов: 33
В номере:Вопросов: 1, Ответов: 3


Вопрос № 53340: Здравия желаю, уважаемые эксперты! Мне нужно сделать, чтобы картинка была транспарентной, то есть в основном она показывалась, а фон, который будет к примеру черный, был прозрачным по отношению к тому изображению, где эта картинка установлена. Ст...

Вопрос № 53.340
Здравия желаю, уважаемые эксперты!
Мне нужно сделать, чтобы картинка была транспарентной, то есть в основном она показывалась, а фон, который будет к примеру черный, был прозрачным по отношению к тому изображению, где эта картинка установлена. Стандартные контролы Image и PictureBox не поддерживают такую возможность. Подскажите, что нужно сделать, чтобы получить такой эффект.
Отправлен: 26.08.2006, 14:03
Вопрос задал: Таянчин Алексей Геннадьевич (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Митрофанов Артем Борисович
Здравствуйте, Таянчин Алексей Геннадьевич!
Прозрачность можно установить с помощью графического редактора, после чего проозрачную картинку можно установить на фон
Ответ отправил: Митрофанов Артем Борисович (статус: 4-ый класс)
Ответ отправлен: 26.08.2006, 14:42
Оценка за ответ: 3

Отвечает: Кокорич Вадим Леонидович
Здравствуйте, Таянчин Алексей Геннадьевич!

Неплохой пример использования накладки одного изображения на другое - в примере Н. Культина "Анимация". Изучив код, Вы разберетесь, как добиться прозрачности части одного изображения на фоне другого (см. приложение). Отбросить лишнее помогут комментарии к программе (она совсем короткая).

Приложение:

---------
Труд сделал обезьяну человеком, а лень человека - программистом !

Ответ отправил: Кокорич Вадим Леонидович (статус: 5-ый класс)
Ответ отправлен: 26.08.2006, 15:29
Оценка за ответ: 5
Комментарий оценки:
Спасибо, все работает отлично! Теперь сделаю свой контрол типа PictureBox с возможностью прозрачности!

Отвечает: C4tnt
Здравствуйте, Таянчин Алексей Геннадьевич!

Если вы решились сделать контрол - посоветую вам более быстрый вариант:

Нужны:

Картинка
Маска
Фон

Маска - картинка, на которой белым цветом закрашено прозрачное место, а чёрным - всё остальное
На вашей картинке прозрачное место должно быть чёрным.

Порядок рисования:
1. Сохраняем DrawMode
2. DrawMode = vbSrcAnd
3. рисуем маску
4. DrawMode = vbSrcOr
5. рисуем картинку
6. восстанавливаем DrawMode

Можно получать дополнительные спецэффекты, такие как изолированный канал (в результате в этом месте будет видна только одна компонента цвета) или смещение (в этом месте цвет будет ограничен по яркости снизу)

Для изоляции канала на маске рисуем цветом, который должен остаться (то есть через красный цвет на маске будет видна красная часть фоновой картинки). Используйте максимально насыщенные цвета. (RGB(255,0,0) и т.п.)

Для смещения рисуем цветом на картинке в её прозрачной части. Для того, чтобы не было проблем
используйте только яркости каналов, имеющие вид 2^n - 1 (0<=n<=8).

Маску можно получить по картинке автоматически

Пример в приложении
Создайте 4 PictureBox'а: Pica,Picb,Picc,PicOut

Pica - AutoRedraw = true
Picb - AutoRedraw = true
Picc - AutoRedraw = true

Pica - картинка
Picb - маска
Picc - фон

UpdateResult - рисует картинку в PicOut
MakeMask - создаёт маску

Маску можно получить ещё быстрее, используя winAPI

Приложение:

---------
Теперь к нашим ответам осталось лишь найти вопросы

Ответ отправил: C4tnt (статус: 2-ой класс)
Ответ отправлен: 27.08.2006, 13:38
Оценка за ответ: 5
Комментарий оценки:
Я уже сделал контрол, немного по другому, но все равно, спасибо за совет!


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.35 от 27.07.2006
Яндекс Rambler's Top100

В избранное