| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > GDI: Копирование BMP с ColorKey |
| Автор: C/L 2.8.2004, 05:35 |
| Мне нужно копировать картинку с одного DC на другой, используя ColorKey. Чтобы заданный цвет оказался прозрачным, т.е. пиксели данного цвета не копировались. В параметрах ф-ии BitBlt нужного свойства я не нашел, в других ф-иях копирования тоже. Желательно было бы осуществить это без GDI+. Хочу чтобы прога работала в Win98. Может есть какой нибудь способ. Помогите пожалуйста. |
| Автор: Олег М 2.8.2004, 07:27 | ||
ГДИ+ прекрасно работает в Вин98. Даже инсталлировать не надо. Просто копируешь ДЛЛки. |
| Автор: C/L 2.8.2004, 21:51 | ||
| ДЛЛки копировать мне конечно лень, да и GDI+ я совсем не знаю. Но если кто нить знает, как это делается, пусть даже с помощью GDI+, покажите пожалуйста пример (очень прошу!!!) или ссылку какую нить. И напишите какие ДЛЛки нужны для GDI+. По аглицкий я к сожаления не понимаю, но переводчиком пользоваться умею.
|
| Автор: mr.DUDA 2.8.2004, 22:14 |
| В чём проблема ? 1) берём пикселы исходного битмапа, создаём по color key AND-маску 2) с пом. MaskBlt объединяем исходный битмап с требуемым, используя маску |
| Автор: C/L 2.8.2004, 22:29 |
| А эта операция медленная? Можешь подробнее рассказать о создании маски? Это не GDI+. И еще по GDI+: ее нужно подключать или простого копирования достаточно? |
| Автор: Олег М 3.8.2004, 06:08 | ||
Достаточно скопировать недостающие ДЛЛки в каталог со своей программой. ГДИ+ намного проще, чем стандартный ГДИ. Времени сэкономишь массу. Наверное. А где примеры взять, к сожалению не знаю. Попробуй здесь поискать http://www.codeguru.com/Cpp/G-M/ что-ли Добавлено @ 06:09 Какие ДЛЛки не помню. Я просто запускал программу и что спрашивала, то и копировал |
| Автор: C/L 3.8.2004, 21:21 |
| Спасибо, Олег М. По поводу MaskBlt: Я недавно дизассемблил MSPAINT из Win98 (хотел посмотреть пример использования маски) и никакого MaskBlt там не нашел. Значит она использует другой метод, возможно более быстрый (хотя это спорно). Хотя она может вызвать ф-ию не через таблицу импорта, я это еще не посмотрел. |
| Автор: AndyY 4.8.2004, 00:16 |
| А нафига GDI+. Большущая и либа и тормозная под 9x. Предлагаю сделать ручками через DIB SECTION - см. help на функции CreateDIBSection. |
| Автор: p0s0l 4.8.2004, 00:30 | ||||
А эта http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/bitmaps_2y9g.asp не подходит ?
Последний параметр то что нужно... Написано, что появилась начиная с 98ой винды... Добавлено @ 00:38 Ай, блин, написано, что в 98-ой будут memory leaks'ы, если юзать TransparentBlt... Но там есть ссылка, где есть готовая функция - замена: http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B79212 правда, если посмотреть, то там больно много действий делается... Можешь сделать проверку версии винды, если 98-ая, то юзая эту тормозную функцию, если не 98ая, то TransparentBlt... |
| Автор: p0s0l 4.8.2004, 00:46 |
| В догонку: можно также юзать AlphaBlend, если сделать 32-битную картинку, и задавать прозрачность у каждого пикселя... |
| Автор: C/L 4.8.2004, 04:51 |
| Спасибо, p0s0l. Как это я пропустил эту ф-ию, не знаю. А твоя ссылка еще интереснее. Там я заметил такую строку: cColor = SetBkColor(hdcTemp, cTransparentColor); Неужто в ней все дело? Проверю напишу. |