Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> GDI: Копирование BMP с ColorKey, Использование ColorKey в GDI. 
:(
    Опции темы
C/L
Дата 2.8.2004, 05:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 31.7.2004
Где: Самара

Репутация: 1
Всего: 1



Мне нужно копировать картинку с одного DC на другой, используя ColorKey. Чтобы заданный цвет оказался прозрачным, т.е. пиксели данного цвета не копировались. В параметрах ф-ии BitBlt нужного свойства я не нашел, в других ф-иях копирования тоже. Желательно было бы осуществить это без GDI+. Хочу чтобы прога работала в Win98. Может есть какой нибудь способ. Помогите пожалуйста.
PM MAIL WWW ICQ   Вверх
Олег М
Дата 2.8.2004, 07:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 436
Регистрация: 10.6.2004
Где: Москва

Репутация: 7
Всего: 7



Цитата
Хочу чтобы прога работала в Win98

ГДИ+ прекрасно работает в Вин98. Даже инсталлировать не надо. Просто копируешь ДЛЛки.
PM MAIL ICQ   Вверх
C/L
  Дата 2.8.2004, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 31.7.2004
Где: Самара

Репутация: 1
Всего: 1



ДЛЛки копировать мне конечно лень, да и GDI+ я совсем не знаю. Но если кто нить знает, как это делается, пусть даже с помощью GDI+, покажите пожалуйста пример (очень прошу!!!) или ссылку какую нить. И напишите какие ДЛЛки нужны для GDI+.
По аглицкий я к сожаления не понимаю, но переводчиком пользоваться умею. smile.gif
Код
#define ThisIsOffTop
if ( Вы->Поможете( &мне)  )
{
   Я->БудуОченьРад();
   Я->ГадомБуду = !ЗАБУДУ;
   Я->Помогу = ЧЕМ_СМОГУ;
}
else
{
   Admin->KillMy ( ONLY_THIS_TOPIC);
}

PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 2.8.2004, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



В чём проблема ?
1) берём пикселы исходного битмапа, создаём по color key AND-маску
2) с пом. MaskBlt объединяем исходный битмап с требуемым, используя маску


--------------------
user posted image
PM MAIL WWW   Вверх
C/L
Дата 2.8.2004, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 31.7.2004
Где: Самара

Репутация: 1
Всего: 1



А эта операция медленная?
Можешь подробнее рассказать о создании маски?
Это не GDI+.
И еще по GDI+: ее нужно подключать или простого копирования достаточно?

Это сообщение отредактировал(а) C/L - 3.8.2004, 03:16
PM MAIL WWW ICQ   Вверх
Олег М
Дата 3.8.2004, 06:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 436
Регистрация: 10.6.2004
Где: Москва

Репутация: 7
Всего: 7



Цитата
И еще по GDI+: ее нужно подключать или простого копирования достаточно?

Достаточно скопировать недостающие ДЛЛки в каталог со своей программой.
ГДИ+ намного проще, чем стандартный ГДИ. Времени сэкономишь массу. Наверное.
А где примеры взять, к сожалению не знаю. Попробуй здесь поискать http://www.codeguru.com/Cpp/G-M/ что-ли
Добавлено @ 06:09
Какие ДЛЛки не помню. Я просто запускал программу и что спрашивала, то и копировал
PM MAIL ICQ   Вверх
C/L
Дата 3.8.2004, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 31.7.2004
Где: Самара

Репутация: 1
Всего: 1



Спасибо, Олег М.
По поводу MaskBlt:
Я недавно дизассемблил MSPAINT из Win98 (хотел посмотреть пример использования маски) и никакого MaskBlt там не нашел. Значит она использует другой метод, возможно более быстрый (хотя это спорно). Хотя она может вызвать ф-ию не через таблицу импорта, я это еще не посмотрел.
PM MAIL WWW ICQ   Вверх
AndyY
Дата 4.8.2004, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 316
Регистрация: 8.5.2004
Где: СПб

Репутация: 2
Всего: 4



А нафига GDI+. Большущая и либа и тормозная под 9x.
Предлагаю сделать ручками через DIB SECTION - см. help на функции CreateDIBSection.



--------------------
PM MAIL WWW   Вверх
p0s0l
Дата 4.8.2004, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 2
Всего: 112



Цитата
В параметрах ф-ии BitBlt нужного свойства я не нашел, в других ф-иях копирования тоже

А эта TransparentBlt не подходит ?
Код

BOOL TransparentBlt(
 HDC hdcDest,        // handle to destination DC
 int nXOriginDest,   // x-coord of destination upper-left corner
 int nYOriginDest,   // y-coord of destination upper-left corner
 int nWidthDest,     // width of destination rectangle
 int hHeightDest,    // height of destination rectangle
 HDC hdcSrc,         // handle to source DC
 int nXOriginSrc,    // x-coord of source upper-left corner
 int nYOriginSrc,    // y-coord of source upper-left corner
 int nWidthSrc,      // width of source rectangle
 int nHeightSrc,     // height of source rectangle
 UINT crTransparent  // color to make transparent
);

Последний параметр то что нужно...
Написано, что появилась начиная с 98ой винды...

Добавлено @ 00:38
Ай, блин, написано, что в 98-ой будут memory leaks'ы, если юзать TransparentBlt... Но там есть ссылка, где есть готовая функция - замена:
http://support.microsoft.com/default.aspx?...3Ben-us%3B79212
правда, если посмотреть, то там больно много действий делается...
Можешь сделать проверку версии винды, если 98-ая, то юзая эту тормозную функцию, если не 98ая, то TransparentBlt...




--------------------
С уважением, г-н Посол.
PM   Вверх
p0s0l
Дата 4.8.2004, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 2
Всего: 112



В догонку: можно также юзать AlphaBlend, если сделать 32-битную картинку, и задавать прозрачность у каждого пикселя...



--------------------
С уважением, г-н Посол.
PM   Вверх
C/L
Дата 4.8.2004, 04:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 31.7.2004
Где: Самара

Репутация: 1
Всего: 1



Спасибо, p0s0l. Как это я пропустил эту ф-ию, не знаю.
А твоя ссылка еще интереснее. Там я заметил такую строку:
cColor = SetBkColor(hdcTemp, cTransparentColor);
Неужто в ней все дело? Проверю напишу.

Это сообщение отредактировал(а) C/L - 4.8.2004, 04:56
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0609 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.