Как программно создать маску?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
GB826
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 312
Зарегистрирован: 04.08.2005 (Чт) 0:58
Откуда: Планета #3

Как программно создать маску?

Сообщение GB826 » 04.08.2005 (Чт) 1:18

Везде поискал, точного ответа не нашел.
Использую только BitBlt.

Возможно ли программно создать маску для какой-либо картинки (bmp), кроме описанного ниже способа.

Узнаем цвет первого пикселя (верхний левый угол) и красим все пиксели такого цвета в белый, остальные в черный... Получившуюся картинку сохраняем во временный файл и используем как маску...

Хотелось бы как-нить попроще, и без использования временных файлов?

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

Сообщение GSerg » 04.08.2005 (Чт) 5:04

А почему, собственно, узнаём цвет первого пикселя?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

GB826
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 312
Зарегистрирован: 04.08.2005 (Чт) 0:58
Откуда: Планета #3

Сообщение GB826 » 04.08.2005 (Чт) 9:16

Ну это не важно, просто 1 пиксель обычно лежит в прозрачной зоне. То есть все остальные символы такого же цвета не будут видны...

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

Сообщение GSerg » 04.08.2005 (Чт) 10:51

Совсем не обязательно он там лежит.
А вот когда знаешь, какой цвет делать прозрачным, то запросто маска получается, быстро и легко.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

GB826
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 312
Зарегистрирован: 04.08.2005 (Чт) 0:58
Откуда: Планета #3

Сообщение GB826 » 04.08.2005 (Чт) 11:01

Слушайте, неважно сейчас, какой цвет. У меня будущий прозрачный обязательно в первом пикселе, мне важно, как сделать маску, зная этот цвет.

Если знаете, как ее легко получить, подскажите, пожалуйста.

Или хотя бы дверь укажите, я сам войду :о))

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

Сообщение GSerg » 04.08.2005 (Чт) 11:06

Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

GB826
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 312
Зарегистрирован: 04.08.2005 (Чт) 0:58
Откуда: Планета #3

Сообщение GB826 » 04.08.2005 (Чт) 11:16

Читал, не помогло, объявляете ТранспарентБЛТ (который я использовать не хочу) а используете битБЛТ, причем очень много раз. ИМХО не оптимально...

Хотелось бы из исходной картинки получить MaskDC уже с маской.
Нужен хотя бы алгоритм.

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

Сообщение GSerg » 04.08.2005 (Чт) 11:28

Дык из того кода для создания маски применяются ровно 3 строчки.

Код: Выделить всё
  'Маска накладываемой картинки -> maskDC
  prevBkColor = SetBkColor(hSrcDC, crTransparent)
  BitBlt tmpMaskDC, 0, 0, nWidth, nHeight, hSrcDC, xSrc, ySrc, vbNotSrcCopy
  SetBkColor hSrcDC, prevBkColor


И ТранспарентБЛТ я не объявляю, а делаю свою, потому что в оригинальной ошибка на виндах 9х.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

GB826
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 312
Зарегистрирован: 04.08.2005 (Чт) 0:58
Откуда: Планета #3

Сообщение GB826 » 04.08.2005 (Чт) 12:06

:о) оки проверю, если что-то не так, я вас найду :о)))


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

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

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

    TopList