информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Все любят медSpanning Tree Protocol: недокументированное применениеАтака на Internet
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Notepad++ полгода раздавал зараженные... 
 Китайский прорыв из ESXi 
 С наступающим 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[Win32] Как в памяти создать цветной битмап (GDI)? 07.05.03 12:02  
Автор: tatar_0x4e Статус: Member
<"чистая" ссылка> <обсуждение закрыто>
Есть задачка - взять 24-битные битмапы для тулбара и создать на их основе такие же, но в disabled варианте. Причем, эта функция должна отработать ДО ТОГО как приложение откроет главное окно. Я решил сделать нечто а-ля LoadImage, полистал MSDN и написал следующее:

static HBITMAP LoadGrayedImage(HINSTANCE hinst, LPCTSTR lpszName, UINT uType, int cxDesired, int cyDesired, UINT fuLoad) {
	HDC dcGrayed, dcDisp;
	HBITMAP bmGrayed;
	HBITMAP bmSrc;
	HGDIOBJ* oldGrayed;

	// Create in-memory bitmap to draw the grayed image
	dcDisp = CreateDC(TEXT("DISPLAY"), NULL, NULL, NULL);
	dcGrayed = CreateCompatibleDC( dcDisp );
	bmGrayed = CreateCompatibleBitmap(dcGrayed, cxDesired, cyDesired);

	// Load image resource
	bmSrc = (HBITMAP)LoadImage(hinst, lpszName, uType, cxDesired, cyDesired, fuLoad);

	oldGrayed = SelectObject(dcGrayed, bmGrayed);

	// Draw embossed image (???)
	DrawState(dcGrayed, (HBRUSH)NULL, NULL, (LPARAM)bmSrc, (WPARAM)NULL, 0, 0, 0, 0, DST_BITMAP | DSS_DISABLED);
    
	// Deinitialize graphic contexts
    SelectObject( dcGrayed, oldGrayed );
    DeleteDC( dcGrayed );
    DeleteDC( dcDisp );
	DeleteObject( bmSrc );

	return bmGrayed;
}

---

Так вот, в результате я имею вместо embossed image нечто в стиле "Черный квадрат Малевича". Долго я медитировал над этой функцией и пришел к выводу, что CreateCompatible... создают мне монохромный битмап и, когда DrawState в него рисует, теряются все цвета. Вопрос: как это сделать правильно? (Создать в памяти полноцветный битмап).
[Win32] Как в памяти создать цветной битмап (GDI)? 07.05.03 13:52  
Автор: dl <Dmitry Leonov>
<"чистая" ссылка> <обсуждение закрыто>
В CreateCompatibleBitmap надо передавать хэндл контекста устройства, в котором выбран полноцветный битмап. dcGrayed сразу после создания таковым не является.

bmGrayed = CreateCompatibleBitmap(dcDisp , cxDesired, cyDesired);
Исчерпывающе! :) 07.05.03 16:08  
Автор: tatar_0x4e Статус: Member
<"чистая" ссылка> <обсуждение закрыто>
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2026 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach