Прозрачный Rectangle

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

Прозрачный Rectangle

Сообщение ANDLL » 08.09.2004 (Ср) 9:11

Собственно как сделать?
Прототип фнкции такой:
Код: Выделить всё
Private Sub RectangleT(ByVal hDC As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal nColor As Long, ByVal nTranspernse As Byte)
Dim nX As Long, nY As Long
For nX = X1 To X2
    For nY = Y1 To Y2
        Dim nCurColor As Long, nNewColor As Long
        nCurColor = GetPixel(hDC, nX, nY)
        'А вот и проблема, что нужно писать nNewColor=...
        SetPixel hDC, nX, nY, nNewColor
    Next
Next
End Sub

Эта функция рисует частично прозрачный прямоугольник заданным цветом.
Думаю, вопрос понятен...

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

Сообщение alibek » 08.09.2004 (Ср) 9:15

Раскладываешь исходный и конечный цвет по RGB, получаешь составляющие как
R = R1 + (R2-R1)*nTranspernse/256
и получаешь результирующий цвет.
Только лучше использовать TransparentBlt, он все за тебя сделает.
Lasciate ogni speranza, voi ch'entrate.

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

Re: Прозрачный Rectangle

Сообщение tyomitch » 08.09.2004 (Ср) 12:07

ANDLL писал(а):Собственно как сделать?

Думаю, вопрос понятен...

Посмотри функцию Blend в моём меню (Наши проекты -> PopupMenu2)
Изображение

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 08.09.2004 (Ср) 13:24

2tyomitch:
Функция Blend делаем в принципе тоже самое, про что говорил alibek. Только слогаемые сгруппированы по-другому.
Я, правда, предпочитаю использовать CopyMemory для разделения на цвета, так круче. Но кому что нравиться. 8) :lol: :shock:

2alibek:
А что делает TransperentBlt такого, что могло бы пригодиться при решении этой проблемы :?:

И спасибо за формулу :) Еще не проверял, но думаю заработает...

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

Сообщение alibek » 08.09.2004 (Ср) 13:30

Создаешь битмап нужного размера (такой же, как требуемый прямоугольник), заливаешь его требуемым цветом и накладываешь на нужный тебе участок с нужной тебе прозрачностью.
Я просто с функцией ошибся, не TransparentBlt, а GdiAlphaBlend.
Lasciate ogni speranza, voi ch'entrate.

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

Сообщение alibek » 08.09.2004 (Ср) 13:31

Кстати, я вот глянул, есть даже GdiGradientFillRect
Lasciate ogni speranza, voi ch'entrate.

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

Сообщение tyomitch » 08.09.2004 (Ср) 15:26

ANDLL писал(а):2tyomitch:
Функция Blend делаем в принципе тоже самое, про что говорил alibek. Только слогаемые сгруппированы по-другому.

Я же не говорил, что это что-то принципиально другое. Просто это готовая функция, а не только намёк на её реализацию.

GdiAlphaBlend и GdiGradientFillRect -
Operating Systems Supported

Requires Windows 2000 or later; Win9x/ME: Not supported

GradientFillRect в этом отношении лучше.
Изображение

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 08.09.2004 (Ср) 17:59

tyomitch писал(а):
ANDLL писал(а):2tyomitch:
Функция Blend делаем в принципе тоже самое, про что говорил alibek. Только слогаемые сгруппированы по-другому.

Я же не говорил, что это что-то принципиально другое. Просто это готовая функция, а не только намёк на её реализацию.

GdiAlphaBlend и GdiGradientFillRect -
Operating Systems Supported

Requires Windows 2000 or later; Win9x/ME: Not supported

GradientFillRect в этом отношении лучше.
Да, ладно. Буду использовать вашу формулу.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог


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

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

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

    TopList