Страница: 1 |
Страница: 1 |
Вопрос: Замена цвета в битмапе
Добавлено: 27.09.04 13:18
Автор вопроса: Comanche
Есть виртуальный контекст. В нём - виртуальный битмапчик. Нужно в нём полностью заменить один цвет на другой. Пока делаю это "в лоб": перебором всех пикселей битмапа (что терпимо только при маленьких размерах битмапа) + GetPixel + SetPixel. Некрасиво это... Нельзя ли покрасивше? наверняка должно решаться через "маски" и с помощью последнего аргумента BitBlt.
Ответы
Всего ответов: 2
Номер ответа: 1
Автор ответа:
crackoff
ICQ: 156165990
Вопросов: 12
Ответов: 229
Профиль | | #1
Добавлено: 27.09.04 13:23
Имеем: с1-исходный цвет, с2-конечный. Теоретически (не пробовал) можно залить контекст (FillRect) c2, а потом TransparentBlt картинку на контекст с прозрачным цветом c1
Номер ответа: 2
Автор ответа:
Comanche
Вопросов: 87
Ответов: 459
Профиль | | #2
Добавлено: 27.09.04 19:59
Не получается.
[CODE]Private Sub Form_Click()
Dim mDC As Long, mBitmap As Long, rct As RECT, mBrush As Long
mDC = CreateCompatibleDC(GetDC(GetDesktopWindow))
mBitmap = CreateCompatibleBitmap(GetDC(GetDesktopWindow), 34, 34)
SelectObject mDC, mBitmap
mBrush = CreateSolidBrush(vbBlue)
SelectObject mDC, mBrush
SetRect rct, 0, 0, 34, 34
FillRect mDC, rct, mBrush
TransparentBlt mDC, 0, 0, 34, 34, Picture1.hdc, 0, 0, 34, 34, vbRed
' в картинке Picture1 - бело-красный BMP размером 34 на 34 пикселя
' из виртуального контекста - на форму:
BitBlt Me.hdc, 0, 0, 34, 34, mDC, 0, 0, vbSrcCopy
DeleteObject mBrush
DeleteObject mBitmap
DeleteDC mDC
End Sub[/CODE]