Страница: 1 |
Вопрос: Помогите BitBlt-новичку! | Добавлено: 12.11.03 17:20 |
Автор вопроса: ![]() |
Братья по разуму! Помогите BitBlt-новичку решить вот такую задачку: Дано: Проэкт, форма, бутон, 2 пикчербокса. 1ый-source - картинка (маленькая) с тремя сцеплеными кольцами (красным, зелёным и синим) на белом фоне. 2ой - target (большая) - кадр из фильма Матрица, где я стою с двумя автоматиками. Задача-по клику по бутону копироветь изображение source на target, без белых краёв. Я написал простой код в 12 строк, работает, НО!!! кольца копируются какими-то полупрозрачными. Вобщем вопрос заключается в том, КАК мне выбрать ДРУГОЙ цвет, не БЕЛЫЙ. Вот ссылка для загрузки моего тестового проэкта. Заранее благодарен. |
Ответы | Всего ответов: 6 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() black admin ICQ: 261779681 Вопросов: 87 Ответов: 633 |
Web-сайт: Профиль | Цитата | #1 | Добавлено: 13.11.03 04:26 |
Сначало надо черные кольца нарисовать, затем цветные... Вот статейка: |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 224 Ответов: 3777 |
Web-сайт: Профиль | Цитата | #2 | Добавлено: 13.11.03 04:47 |
2 Алексей: п.1: За статейку большой сенкс! п.2: А их над чёрным рисовать, да? Да и трех колец хватит, зачем четвёртое? |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() black admin ICQ: 261779681 Вопросов: 87 Ответов: 633 |
Web-сайт: Профиль | Цитата | #3 | Добавлено: 13.11.03 08:56 |
Черный - это чтоб кольца не были полупрозрачными, сначала рисуешь черное, затем сверху цветное. См. пример в той статье. |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 224 Ответов: 3777 |
Web-сайт: Профиль | Цитата | #4 | Добавлено: 13.11.03 11:23 |
Здорово работает! Но вот чтобы создать маски для всех кадров моей новой игрухи, понадобится уйма времени. Я уж лучше буду создавать маски програмно, при запуске игры. Выигрыш во времени огромен! |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 224 Ответов: 3777 |
Web-сайт: Профиль | Цитата | #5 | Добавлено: 13.11.03 11:25 |
Здорово работает! Но вот чтобы создать маски для всех кадров моей новой игрухи, понадобится уйма времени. Я уж лучше буду создавать маски програмно, при запуске игры. Выигрыш во времени огромен! Да, кстати, в той статье функцию в тексте называют неверно (bitbTl Вместо bitbLt) |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 10 Ответов: 387 |
Web-сайт: Профиль | Цитата | #6 | Добавлено: 13.11.03 20:51 |
Внесу и я свою лепту.... новичок я тут ..... но уже мне нравится.... Начну с того почему у тебя такой "прикол" ты используешь констнту SRCAND (хотя лучше будет использовать уже имеющиеся константы вВБ... vbSrcAnd) это значит что биты будут накладыватся с использовнием логиского И .... что это значит ? а то вот у тебятам белый цвет есть .... он имеет значение &HFFFFFF и он накладывается на ... нашу кртинку.... чтотполучаем ?... да получаем тоже что и было то бишь белый цвет будет не заметен на картинке.... а чтож будет если цвет не имеет значение &HFFFFFF .... то будут удалятся те значения которые не входят в данную маску..... ии получается эффект цветного стекла..... НУ ЧТО ДЕЛАТЬ ТО ???? я тут предложил дв врианта........ 1)Взять положить 2) Перенос битов Приведённые примеры ... я сделал над тем что ты выложил ... Private Declare Function TransparentBlt Lib "msimg32.dll" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal crTransparent As Long) As Boolean эта АПи нам поможит перенисти биты .... и указав транспарентный цвет белый..... vbWhite или &HFFFFFF ... то мы получим нужный результат .... зачем тогда второйто ??? способ .... хм.. да так для разнообразия )+ Вот её вызов.... незабудь поставить Scae Mod ... в режим пикселов так как АПИ работают только с пикселами TransparentBlt target.hdc, 110, 110, source.ScaleWidth, source.ScaleHeight, source.hdc, 0, 0, source.ScaleWidth, source.ScaleHeight, vbWhite +я поставил Авторредро.... в режим Тру.... так что ещё надо будет отрефрешить рисунок (если не ставил то не надо...) Способ два..... объявляем АПИ Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long Private Declare Function SetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Long Dim w As Integer Dim h As Integer Dim i As Long, j As Long Dim hdcDest As Long, hdcSrc As Long Dim testColor32 As Long w = source.Width \ Screen.TwipsPerPixelX h = source.Height \ Screen.TwipsPerPixelY i = 0: j = 0: hdcSrc = source.hdc: hdcDest = target.hdc Do While i < h Do While j < w testColor32 = GetPixel(hdcSrc, j, i) If testColor32 <> &HFFFFFF Then SetPixel hdcDest, j + 110, i + 110, testColor32 End If j = j + 1 Loop j = 0 i = i + 1 Loop target.Refresh ' если только авторедро в ТРУ поствил если нет то нет ..... ну вот я думаю ответил на твой вопрос ... как можно полно.... П.С: Да у меня плохая клвиатура .... |
Страница: 1 |
|