![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| C/L |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 31.7.2004 Где: Самара Репутация: 1 Всего: 1 |
Мне нужно копировать картинку с одного DC на другой, используя ColorKey. Чтобы заданный цвет оказался прозрачным, т.е. пиксели данного цвета не копировались. В параметрах ф-ии BitBlt нужного свойства я не нашел, в других ф-иях копирования тоже. Желательно было бы осуществить это без GDI+. Хочу чтобы прога работала в Win98. Может есть какой нибудь способ. Помогите пожалуйста.
|
|||
|
||||
| Олег М |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
ГДИ+ прекрасно работает в Вин98. Даже инсталлировать не надо. Просто копируешь ДЛЛки. |
|||
|
||||
| C/L |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 31.7.2004 Где: Самара Репутация: 1 Всего: 1 |
ДЛЛки копировать мне конечно лень, да и GDI+ я совсем не знаю. Но если кто нить знает, как это делается, пусть даже с помощью GDI+, покажите пожалуйста пример (очень прошу!!!) или ссылку какую нить. И напишите какие ДЛЛки нужны для GDI+.
По аглицкий я к сожаления не понимаю, но переводчиком пользоваться умею.
|
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
В чём проблема ?
1) берём пикселы исходного битмапа, создаём по color key AND-маску 2) с пом. MaskBlt объединяем исходный битмап с требуемым, используя маску -------------------- ![]() |
|||
|
||||
| C/L |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 31.7.2004 Где: Самара Репутация: 1 Всего: 1 |
А эта операция медленная?
Можешь подробнее рассказать о создании маски? Это не GDI+. И еще по GDI+: ее нужно подключать или простого копирования достаточно? Это сообщение отредактировал(а) C/L - 3.8.2004, 03:16 |
|||
|
||||
| Олег М |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
Достаточно скопировать недостающие ДЛЛки в каталог со своей программой. ГДИ+ намного проще, чем стандартный ГДИ. Времени сэкономишь массу. Наверное. А где примеры взять, к сожалению не знаю. Попробуй здесь поискать http://www.codeguru.com/Cpp/G-M/ что-ли Добавлено @ 06:09 Какие ДЛЛки не помню. Я просто запускал программу и что спрашивала, то и копировал |
|||
|
||||
| C/L |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 31.7.2004 Где: Самара Репутация: 1 Всего: 1 |
Спасибо, Олег М.
По поводу MaskBlt: Я недавно дизассемблил MSPAINT из Win98 (хотел посмотреть пример использования маски) и никакого MaskBlt там не нашел. Значит она использует другой метод, возможно более быстрый (хотя это спорно). Хотя она может вызвать ф-ию не через таблицу импорта, я это еще не посмотрел. |
|||
|
||||
| AndyY |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 8.5.2004 Где: СПб Репутация: 2 Всего: 4 |
А нафига GDI+. Большущая и либа и тормозная под 9x.
Предлагаю сделать ручками через DIB SECTION - см. help на функции CreateDIBSection. |
|||
|
||||
| p0s0l |
|
||||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 2 Всего: 112 |
А эта TransparentBlt не подходит ?
Последний параметр то что нужно... Написано, что появилась начиная с 98ой винды... Добавлено @ 00:38 Ай, блин, написано, что в 98-ой будут memory leaks'ы, если юзать TransparentBlt... Но там есть ссылка, где есть готовая функция - замена: http://support.microsoft.com/default.aspx?...3Ben-us%3B79212 правда, если посмотреть, то там больно много действий делается... Можешь сделать проверку версии винды, если 98-ая, то юзая эту тормозную функцию, если не 98ая, то TransparentBlt... -------------------- С уважением, г-н Посол. |
||||
|
|||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 2 Всего: 112 |
В догонку: можно также юзать AlphaBlend, если сделать 32-битную картинку, и задавать прозрачность у каждого пикселя...
-------------------- С уважением, г-н Посол. |
|||
|
||||
| C/L |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 31.7.2004 Где: Самара Репутация: 1 Всего: 1 |
Спасибо, p0s0l. Как это я пропустил эту ф-ию, не знаю.
А твоя ссылка еще интереснее. Там я заметил такую строку: cColor = SetBkColor(hdcTemp, cTransparentColor); Неужто в ней все дело? Проверю напишу. Это сообщение отредактировал(а) C/L - 4.8.2004, 04:56 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |