Rysowanie bitmapy w WinApi

0

Cześć
Chciałbym utworzyć nową bitmapę z pikseli zdefiniowanych w tablicy. Czy da się to zrobić w jakiś sensowniejszy sposób niż SetPixel()?

Próbowałem wykorzystać funkcję CreateBitmap(). Niestety udało mi się uzyskać jedynie garść czarnych kropek :/
Kiedy zmieniam parametry funkcji cPlanes i cBitsPerPel to niestety nic się nie maluje.
W dokumentacji msdn przeczytałem, że do utworzenia kolorowej bitmapy, ze względów wydajnościowych, powinno się stosować funkcję CreateCompatibleBitmap(). Funkcja tworzy bitmapę, ale jak ją potem wymalować wartościami z tablicy?

static void DrawFlag( HWND hwnd, HDC hdc )
{
	// DEKLARACJE
	// tablica z bitmapą
	char		piksel[] = {
		0xf6, 0x23, 0x23, 0xf5, 0x1e, 0x1e, 0xf4, 0x19, 0x19, 0xf3, 0x13, 0x13, 0xf2, 0x0e, 0x0f,
		0xf1, 0x0b, 0x0b, 0xf1, 0x2f, 0x2f, 0xf2, 0x00, 0x00, 0xdf, 0x00, 0x00, 0xfb, 0x6a, 0x6a,
		0xfc, 0x49, 0x49, 0xfb, 0x45, 0x45, 0xfb, 0x3f, 0x3f, 0xfa, 0x3a, 0x3a, 0xf9, 0x34, 0x34,
		0xf8, 0x2f, 0x2f, 0xf7, 0x2a, 0x2a, 0xf6, 0x24, 0x24, 0xf5, 0x1f, 0x1f, 0xf4, 0x19, 0x19,
		0xf3, 0x14, 0x14, 0xf2, 0x10, 0x10, 0xf2, 0x32, 0x32, 0xf3, 0x00, 0x00, 0xdf, 0x00, 0x00,
		0xfd, 0x6f, 0x6f, 0xfd, 0x4f, 0x4f, 0xfc, 0x49, 0x4a, 0xfb, 0x45, 0x45, 0xfb, 0x40, 0x40,
		0xfa, 0x3a, 0x3b, 0xf9, 0x35, 0x35, 0xf8, 0x2f, 0x2f, 0xf7, 0x2a, 0x2a, 0xf6, 0x24, 0x24,
		0xf5, 0x1f, 0x1f, 0xf4, 0x19, 0x19, 0xf3, 0x14, 0x14, 0xf2, 0x36, 0x36, 0xf4, 0x00, 0x00,
		0xe3, 0x00, 0x00, 0xfd, 0x8e, 0x8e, 0xfe, 0x74, 0x74, 0xfd, 0x70, 0x70, 0xfc, 0x6c, 0x6c,
		0xfc, 0x68, 0x68, 0xfb, 0x64, 0x64, 0xfa, 0x60, 0x60, 0xf9, 0x5b, 0x5b, 0xf8, 0x57, 0x56,
		0xf7, 0x52, 0x52, 0xf6, 0x4d, 0x4d, 0xf5, 0x48, 0x48, 0xf4, 0x44, 0x44, 0xf3, 0x5f, 0x5f,
		0xf4, 0x00, 0x00, 0xe5, 0xf1, 0xf1, 0xfd, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfd, 0xfd,
		0xfd, 0xfd, 0xfc, 0xfd, 0xfc, 0xfc, 0xfc, 0xfb, 0xfb, 0xfb, 0xfa, 0xfa, 0xfa, 0xf9, 0xf9,
		0xf9, 0xf8, 0xf8, 0xf8, 0xf7, 0xf7, 0xf7, 0xf6, 0xf6, 0xf6, 0xf5, 0xf5, 0xf5, 0xf4, 0xf4,
		0xf4, 0xf5, 0xf5, 0xf5, 0xd5, 0xd5, 0xe7, 0xf1, 0xf1, 0xff, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
		0xfe, 0xfe, 0xfe, 0xfe, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfc, 0xfc, 0xfc, 0xfb, 0xfb,
		0xfb, 0xfa, 0xfa, 0xfa, 0xf9, 0xf9, 0xf9, 0xf8, 0xf8, 0xf8, 0xf7, 0xf7, 0xf7, 0xf6, 0xf6,
		0xf6, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6, 0xd7, 0xd7, 0xe7, 0xf1, 0xf1, 0xff, 0xff, 0xff,
		0xff, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd,
		0xfd, 0xfc, 0xfc, 0xfc, 0xfb, 0xfb, 0xfb, 0xfa, 0xfa, 0xfa, 0xf9, 0xf9, 0xf9, 0xf8, 0xf8,
		0xf8, 0xf7, 0xf7, 0xf7, 0xf6, 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xd9, 0xd9, 0xe9, 0xf1, 0xf1,
		0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
		0xfe, 0xfe, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfb, 0xfb,
		0xfb, 0xfa, 0xfa, 0xfa, 0xf9, 0xf9, 0xf9, 0xf8, 0xf8, 0xf8, 0xf7, 0xf7, 0xf7, 0xdd, 0xdd,
		0xeb, 0xf1, 0xf1, 0xff, 0xf1, 0xf1, 0xff, 0xf1, 0xf1, 0xff, 0xf1, 0xf1, 0xff, 0xf1, 0xf1,
		0xfd, 0xf1, 0xef, 0xfd, 0xef, 0xef, 0xfd, 0xed, 0xed, 0xfd, 0xed, 0xed, 0xfb, 0xeb, 0xeb,
		0xf9, 0xe9, 0xe9, 0xf7, 0xe7, 0xe7, 0xf5, 0xe5, 0xe5, 0xf3, 0xe3, 0xe3, 0xf1, 0xe1, 0xe1,
		0xef, 0xdf, 0xdf};
	HDC			hdcNowy;// dodatkowe HDC
	HBITMAP		bmp;	// nowa bitmapa z flagą
	HBITMAP		hbmOld;	// domyslna bitmapa dodatkowego HDC

	// INICJALIZACJA
	bmp = CreateBitmap( 16, 11, 1, 1, piksel );
	hdcNowy = CreateCompatibleDC( hdc );
	hbmOld = (HBITMAP)SelectObject( hdcNowy, bmp );

	// RYSOWANIE
	BitBlt( hdc, 0, 0, 16, 11, hdcNowy, 0, 0, SRCCOPY );

	// SPRZĄTANIE
	SelectObject( hdcNowy, hbmOld );	// przywrócenie domyslnej bitmapy
	DeleteDC( hdcNowy );				// usunięcie dodatkowego HDC
}
static LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )
{
			RECT		rc;		// rozmiar okna
			HDC			hdc;	// wyłącznie do rysowania
			PAINTSTRUCT	ps;		// wyłącznie do rysowania

	switch ( message )
	{
	case WM_PAINT:
		hdc = BeginPaint( hwnd, &ps );
		DrawFlag( hwnd, hdc ); 
		EndPaint( hwnd, &ps );
		return 0;
        
	case WM_DESTROY:
		PostQuitMessage( 0 );
		break;
	}
	return DefWindowProc( hwnd, message, wParam, lParam );
}
0

Powinieneś dostać kopa za:
1)
Ręczne wypełnianie tablicy. Na co to, po co to? A jak przyjdzie zmienić obrazek?
2)
pisanie windows-only.

Polecę ci openGL i/lub SDL.

0

Wpisz tam 24 bity na piksel zamiast 1.

Ale o ile pamiętam to chyba nie działa dla kolorowych - spróbuj CreateDIBSection... ta na pewno zadziała.

0
spartanPAGE napisał(a):

Ręczne wypełnianie tablicy. Na co to, po co to? A jak przyjdzie zmienić obrazek?

hmm...
Czy jest w tym coś złego, czy jedyny argument "bo tak się nie robi"?
Jeśli już koniecznie musisz wiedzieć to obrazek będzie się wczytywał z pliku w którym będą też inne o tych samych wymiarach.
Na przyszłość specjalnie dla Ciebie będę wrzucać dodatkowy kod wczytujący plik i wypełniający tablice oraz umieszczę plik który wczytuję do pobrania.

spartanPAGE napisał(a):

pisanie windows-only.

Może się nie znam, ale funkcje systemowe działają tylko pod określonym systemem operacyjnym.
Zresztą jak będę chciał mieć ten sam program w innym systemie to jest taka prosta konstrukcja

#ifdef WIN32

// kod windows

#else

// kod linux

#endif
spartanPAGE napisał(a):

Polecę ci openGL i/lub SDL.

Nie widzę potrzeby zaprzęgać biblioteki multimedialnej SDL do wyświetlania 176 pikseli na ekranie.
Czy jak będę chciał wypisać w konsoli "Hello World" to polecisz mi np. ncurses?

Co do OpenGL to chyba to nie jest najlepszy pomysł.
Zależy mi żeby wyświetlać ten obrazek w mojej kontrolce, którą robię i szczerze mówiąc nawet nie bardzo bym wiedział jak to podłączyć pod WM_PAINT. Poza tym sama inicjalizacja OpenGL przy każdym odmalowywaniu okna na pewno zajmowałaby więcej czasu niż wyświetlenie pikseli za pomocą winapi.

fe napisał(a):

Wpisz tam 24 bity na piksel zamiast 1.

Ale o ile pamiętam to chyba nie działa dla kolorowych - spróbuj CreateDIBSection... ta na pewno zadziała.

Próbowałem różnych kombinacji:
1 24
3 24
3 32
itp. itd.
Niestety nic mi wtedy nie wyświetla.
O CreateDIBSection nic nie słyszałem.
Jutro spróbuję i dam znać jak poszło. Dzięki.

0

CreateDIBSection powinno działać z 24bit bitmapą ale z tą Twoją coś nie chce. Zauważyłem że coś tu nie gra, bo jeżeli jest to poprawna bitmapa 24bitowa to skoro tam masz 408 bajtów nie może być to bitmapa o wymiarach 16x11 jak wynika z Twojego kodu ponieważ 408 bajtów / 3 bajty (24 bity) = 136 a 136 nie dzieli się całkowicie przez 16 ani 11. Więc radzę zweryfikować parametry bitmapy.

0

Ups..
Faktycznie nie te bajty wziąłem.
Tutaj są te właściwe:

char	piksel[] = {0xff, 0xf1, 0xf1, 0xff, 0xf1, 0xf1, 0xff, 0xf1, 0xf1, 0xff, 0xf1, 0xf1, 0xfd, 0xf1, 0xf1, 0xfd,
			0x00, 0x00, 0xfd, 0x00, 0x00, 0xfb, 0x00, 0x00, 0xf9, 0x00, 0x00, 0xf7, 0x00, 0x00, 0xf5, 0x00,
			0x00, 0xff, 0xf1, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
			0xfe, 0x8e, 0x8e, 0xfd, 0x6f, 0x6f, 0xfc, 0x6a, 0x6a, 0xfc, 0x66, 0x66, 0xfb, 0x61, 0x62, 0xf3,
			0x00, 0x00, 0xff, 0xf1, 0xf1, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
			0xfe, 0xfd, 0x74, 0x74, 0xfc, 0x4f, 0x4f, 0xfb, 0x49, 0x49, 0xfa, 0x44, 0x44, 0xfa, 0x5d, 0x5d,
			0xf1, 0x00, 0x00, 0xff, 0xf1, 0xf1, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfd,
			0xfd, 0xfd, 0xfc, 0x70, 0x70, 0xfb, 0x4a, 0x49, 0xfb, 0x45, 0x45, 0xfa, 0x3f, 0x3f, 0xf9, 0x58,
			0x58, 0xef, 0x00, 0x00, 0xfd, 0xf1, 0xf1, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfd, 0xfd, 0xfd,
			0xfd, 0xfc, 0xfd, 0xfc, 0x6c, 0x6c, 0xfb, 0x45, 0x45, 0xfa, 0x3f, 0x3f, 0xf9, 0x3a, 0x3a, 0xf9,
			0x54, 0x55, 0xed, 0x00, 0x00, 0xfd, 0xef, 0xf1, 0xfe, 0xfe, 0xfe, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd,
			0xfd, 0xfc, 0xfc, 0xfc, 0xfb, 0x68, 0x68, 0xfa, 0x40, 0x40, 0xf9, 0x3a, 0x3a, 0xf8, 0x34, 0x34,
			0xf8, 0x50, 0x50, 0xed, 0x00, 0x00, 0xfd, 0xef, 0xef, 0xfd, 0xfd, 0xfe, 0xfd, 0xfd, 0xfd, 0xfc,
			0xfc, 0xfc, 0xfb, 0xfb, 0xfb, 0xfa, 0x64, 0x64, 0xf9, 0x3b, 0x3a, 0xf8, 0x34, 0x34, 0xf7, 0x2e,
			0x2e, 0xf7, 0x4b, 0x4b, 0xeb, 0x00, 0x00, 0xfd, 0xed, 0xed, 0xfd, 0xfd, 0xfd, 0xfc, 0xfc, 0xfc,
			0xfb, 0xfb, 0xfb, 0xfa, 0xfa, 0xfa, 0xf9, 0x60, 0x60, 0xf8, 0x35, 0x35, 0xf7, 0x2f, 0x2f, 0xf6,
			0x29, 0x29, 0xf7, 0x46, 0x46, 0xe9, 0x00, 0x00, 0xfb, 0xed, 0xed, 0xfc, 0xfc, 0xfc, 0xfb, 0xfb,
			0xfb, 0xfa, 0xfa, 0xfa, 0xf9, 0xf9, 0xf9, 0xf8, 0x5b, 0x5b, 0xf7, 0x2f, 0x2f, 0xf6, 0x2a, 0x2a,
			0xf5, 0x23, 0x23, 0xf6, 0x42, 0x42, 0xe7, 0x00, 0x00, 0xf9, 0xeb, 0xeb, 0xfc, 0xfc, 0xfc, 0xfa,
			0xfa, 0xfa, 0xf9, 0xf9, 0xf9, 0xf8, 0xf8, 0xf8, 0xf7, 0x56, 0x57, 0xf6, 0x2a, 0x2a, 0xf5, 0x24,
			0x24, 0xf4, 0x1e, 0x1e, 0xf5, 0x3d, 0x3d, 0xe5, 0x00, 0x00, 0xf7, 0xe9, 0xe9, 0xfb, 0xfb, 0xfb,
			0xf9, 0xf9, 0xf9, 0xf8, 0xf8, 0xf8, 0xf7, 0xf7, 0xf7, 0xf6, 0x52, 0x52, 0xf5, 0x24, 0x24, 0xf4,
			0x1f, 0x1f, 0xf3, 0x19, 0x19, 0xf4, 0x39, 0x39, 0xe3, 0x00, 0x00, 0xf5, 0xe7, 0xe7, 0xfa, 0xfa,
			0xfa, 0xf8, 0xf8, 0xf8, 0xf7, 0xf7, 0xf7, 0xf6, 0xf6, 0xf6, 0xf5, 0x4d, 0x4d, 0xf4, 0x1f, 0x1f,
			0xf3, 0x19, 0x19, 0xf2, 0x13, 0x13, 0xf3, 0x35, 0x35, 0xe1, 0x00, 0x00, 0xf3, 0xe5, 0xe5, 0xf9,
			0xf9, 0xf9, 0xf7, 0xf7, 0xf7, 0xf6, 0xf6, 0xf6, 0xf5, 0xf5, 0xf5, 0xf4, 0x48, 0x48, 0xf3, 0x19,
			0x19, 0xf2, 0x14, 0x14, 0xf1, 0x0f, 0x0e, 0xf2, 0x32, 0x32, 0xdf, 0x00, 0x00, 0xf1, 0xe3, 0xe3,
			0xf8, 0xf8, 0xf8, 0xf6, 0xf6, 0xf6, 0xf5, 0xf5, 0xf5, 0xf4, 0xf4, 0xf4, 0xf3, 0x44, 0x44, 0xf2,
			0x14, 0x14, 0xf2, 0x10, 0x10, 0xf1, 0x0b, 0x0b, 0xf2, 0x2f, 0x2f, 0xdd, 0x00, 0x00, 0xef, 0xe1,
			0xe1, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf6, 0xf6, 0xf6, 0xf5, 0xf5, 0xf5, 0xf4, 0x5f, 0x5f,
			0xf4, 0x36, 0x36, 0xf3, 0x32, 0x32, 0xf2, 0x2f, 0x2f, 0xf2, 0x2c, 0x2c, 0xdd, 0x00, 0x00, 0xed,
			0xdf, 0xdf, 0xeb, 0xdd, 0xdd, 0xe9, 0xd9, 0xd9, 0xe7, 0xd7, 0xd7, 0xe7, 0xd5, 0xd5, 0xe5, 0x00,
			0x00, 0xe3, 0x00, 0x00, 0xdf, 0x00, 0x00, 0xdf, 0x00, 0x00, 0xdd, 0x00, 0x00, 0xdd, 0x00, 0x00};

Zaraz się biorę za CreateDIBSection.

0

Jest jakiś progres :) tzn. nie mam już czarnych kropek.
Teraz maluje fioletowe, poziome, faliste linie.
user image
Nie wiem dlaczego się tak dzieje. Czy jeszcze jakiś parametr trzeba podać?

static void DrawFlag( HWND hwnd, HDC hdc )
{
	// DEKLARACJE
	// tablica z bitmapą
	char		piksel[] = {0xff, 0xf1, 0xf1, 0xff, 0xf1, 0xf1, 0xff, 0xf1, 0xf1, 0xff, 0xf1, 0xf1, 0xfd, 0xf1, 0xf1, 0xfd,
				0x00, 0x00, 0xfd, 0x00, 0x00, 0xfb, 0x00, 0x00, 0xf9, 0x00, 0x00, 0xf7, 0x00, 0x00, 0xf5, 0x00,
				0x00, 0xff, 0xf1, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
				0xfe, 0x8e, 0x8e, 0xfd, 0x6f, 0x6f, 0xfc, 0x6a, 0x6a, 0xfc, 0x66, 0x66, 0xfb, 0x61, 0x62, 0xf3,
				0x00, 0x00, 0xff, 0xf1, 0xf1, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
				0xfe, 0xfd, 0x74, 0x74, 0xfc, 0x4f, 0x4f, 0xfb, 0x49, 0x49, 0xfa, 0x44, 0x44, 0xfa, 0x5d, 0x5d,
				0xf1, 0x00, 0x00, 0xff, 0xf1, 0xf1, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfd,
				0xfd, 0xfd, 0xfc, 0x70, 0x70, 0xfb, 0x4a, 0x49, 0xfb, 0x45, 0x45, 0xfa, 0x3f, 0x3f, 0xf9, 0x58,
				0x58, 0xef, 0x00, 0x00, 0xfd, 0xf1, 0xf1, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfd, 0xfd, 0xfd,
				0xfd, 0xfc, 0xfd, 0xfc, 0x6c, 0x6c, 0xfb, 0x45, 0x45, 0xfa, 0x3f, 0x3f, 0xf9, 0x3a, 0x3a, 0xf9,
				0x54, 0x55, 0xed, 0x00, 0x00, 0xfd, 0xef, 0xf1, 0xfe, 0xfe, 0xfe, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd,
				0xfd, 0xfc, 0xfc, 0xfc, 0xfb, 0x68, 0x68, 0xfa, 0x40, 0x40, 0xf9, 0x3a, 0x3a, 0xf8, 0x34, 0x34,
				0xf8, 0x50, 0x50, 0xed, 0x00, 0x00, 0xfd, 0xef, 0xef, 0xfd, 0xfd, 0xfe, 0xfd, 0xfd, 0xfd, 0xfc,
				0xfc, 0xfc, 0xfb, 0xfb, 0xfb, 0xfa, 0x64, 0x64, 0xf9, 0x3b, 0x3a, 0xf8, 0x34, 0x34, 0xf7, 0x2e,
				0x2e, 0xf7, 0x4b, 0x4b, 0xeb, 0x00, 0x00, 0xfd, 0xed, 0xed, 0xfd, 0xfd, 0xfd, 0xfc, 0xfc, 0xfc,
				0xfb, 0xfb, 0xfb, 0xfa, 0xfa, 0xfa, 0xf9, 0x60, 0x60, 0xf8, 0x35, 0x35, 0xf7, 0x2f, 0x2f, 0xf6,
				0x29, 0x29, 0xf7, 0x46, 0x46, 0xe9, 0x00, 0x00, 0xfb, 0xed, 0xed, 0xfc, 0xfc, 0xfc, 0xfb, 0xfb,
				0xfb, 0xfa, 0xfa, 0xfa, 0xf9, 0xf9, 0xf9, 0xf8, 0x5b, 0x5b, 0xf7, 0x2f, 0x2f, 0xf6, 0x2a, 0x2a,
				0xf5, 0x23, 0x23, 0xf6, 0x42, 0x42, 0xe7, 0x00, 0x00, 0xf9, 0xeb, 0xeb, 0xfc, 0xfc, 0xfc, 0xfa,
				0xfa, 0xfa, 0xf9, 0xf9, 0xf9, 0xf8, 0xf8, 0xf8, 0xf7, 0x56, 0x57, 0xf6, 0x2a, 0x2a, 0xf5, 0x24,
				0x24, 0xf4, 0x1e, 0x1e, 0xf5, 0x3d, 0x3d, 0xe5, 0x00, 0x00, 0xf7, 0xe9, 0xe9, 0xfb, 0xfb, 0xfb,
				0xf9, 0xf9, 0xf9, 0xf8, 0xf8, 0xf8, 0xf7, 0xf7, 0xf7, 0xf6, 0x52, 0x52, 0xf5, 0x24, 0x24, 0xf4,
				0x1f, 0x1f, 0xf3, 0x19, 0x19, 0xf4, 0x39, 0x39, 0xe3, 0x00, 0x00, 0xf5, 0xe7, 0xe7, 0xfa, 0xfa,
				0xfa, 0xf8, 0xf8, 0xf8, 0xf7, 0xf7, 0xf7, 0xf6, 0xf6, 0xf6, 0xf5, 0x4d, 0x4d, 0xf4, 0x1f, 0x1f,
				0xf3, 0x19, 0x19, 0xf2, 0x13, 0x13, 0xf3, 0x35, 0x35, 0xe1, 0x00, 0x00, 0xf3, 0xe5, 0xe5, 0xf9,
				0xf9, 0xf9, 0xf7, 0xf7, 0xf7, 0xf6, 0xf6, 0xf6, 0xf5, 0xf5, 0xf5, 0xf4, 0x48, 0x48, 0xf3, 0x19,
				0x19, 0xf2, 0x14, 0x14, 0xf1, 0x0f, 0x0e, 0xf2, 0x32, 0x32, 0xdf, 0x00, 0x00, 0xf1, 0xe3, 0xe3,
				0xf8, 0xf8, 0xf8, 0xf6, 0xf6, 0xf6, 0xf5, 0xf5, 0xf5, 0xf4, 0xf4, 0xf4, 0xf3, 0x44, 0x44, 0xf2,
				0x14, 0x14, 0xf2, 0x10, 0x10, 0xf1, 0x0b, 0x0b, 0xf2, 0x2f, 0x2f, 0xdd, 0x00, 0x00, 0xef, 0xe1,
				0xe1, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf6, 0xf6, 0xf6, 0xf5, 0xf5, 0xf5, 0xf4, 0x5f, 0x5f,
				0xf4, 0x36, 0x36, 0xf3, 0x32, 0x32, 0xf2, 0x2f, 0x2f, 0xf2, 0x2c, 0x2c, 0xdd, 0x00, 0x00, 0xed,
				0xdf, 0xdf, 0xeb, 0xdd, 0xdd, 0xe9, 0xd9, 0xd9, 0xe7, 0xd7, 0xd7, 0xe7, 0xd5, 0xd5, 0xe5, 0x00,
				0x00, 0xe3, 0x00, 0x00, 0xdf, 0x00, 0x00, 0xdf, 0x00, 0x00, 0xdd, 0x00, 0x00, 0xdd, 0x00, 0x00};
	HDC			hdcNowy;// dodatkowe HDC
	BITMAPINFO	bi;
	HBITMAP		bmp;	// nowa bitmapa z flagą
	HBITMAP		hbmOld;	// domyslna bitmapa dodatkowego HDC

	hdcNowy = CreateCompatibleDC( hdc );

	bi.bmiHeader.biSize	  = sizeof(BITMAPINFOHEADER);
	bi.bmiHeader.biWidth	 = 16;
	bi.bmiHeader.biHeight	= 11;
	bi.bmiHeader.biPlanes	= 1;
	bi.bmiHeader.biBitCount	= 24;
	bi.bmiHeader.biCompression	= BI_RGB;
	bi.bmiHeader.biSizeImage	= 0;
	bi.bmiHeader.biClrUsed		= 0;
	bmp = CreateDIBSection( hdcNowy, &bi, DIB_RGB_COLORS, 0, 0, 0);
	hbmOld = (HBITMAP)SelectObject(hdcNowy, bmp);

	SetDIBits( hdcNowy, bmp, 0, 11, piksel, &bi, DIB_RGB_COLORS );
	BitBlt( hdc, 0, 0, 16, 11, hdcNowy, 0, 0, SRCCOPY );

	SelectObject( hdcNowy, hbmOld );	// przywrócenie domyslnej bitmapy
	DeleteDC( hdcNowy );			// usunięcie dodatkowego HDC
	DeleteObject( bmp );
}

P.S
Czy wam też rozjeżdżają się tabulatory jak kopiujecie kod z VS2010?

0

podajesz że bitmapa jest 24-bitowa podczas gdy nie jest.

0

Chyba nie rozumiem.
Mam w tablicy 528 bajtów.
Chcę wymalować obrazek 16x11 pikseli czyli muszę podać wartości 176 pikseli.
Jeden piksel określają 3 kolejne wartości w tablicy ( R, G, B ) 3 bajty * 8 bitów każdy = 24 bity.

bi.bmiHeader.biBitCount = 24;

176 pikseli * 3 bajty na każdy = 528 - czyli moja tablica.
Wszystko się zgadza, albo nie rozumiem.

0

Nie działa, daj link do tej bitmapy (wyślij ją na jakiś darmowy hosting) czy coś bo tu jest coś nike tak. Też dostają takie coś jak Ty a inne bitmapy wyświetlają się poprawnie.

0

Kiedy ładuje bitmapę za pomocą LoadImage() to też mi działa.
Problem pojawia się kiedy chce zainicjalizować ją bezpośrednio tablicą wartości.

link do bitmapy:
http://img850.imageshack.us/img850/2858/13411038.png

Kod całego programu

#include <Windows.h>
// MALOWANIE FLAGI
static void DrawFlag( HWND hwnd, HDC hdc )
{
	char	piksel[] = {0xff, 0xf1, 0xf1, 0xff, 0xf1, 0xf1, 0xff, 0xf1, 0xf1, 0xff, 0xf1, 0xf1, 0xfd, 0xf1, 0xf1, 0xfd,
						0x00, 0x00, 0xfd, 0x00, 0x00, 0xfb, 0x00, 0x00, 0xf9, 0x00, 0x00, 0xf7, 0x00, 0x00, 0xf5, 0x00,
						0x00, 0xff, 0xf1, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
						0xfe, 0x8e, 0x8e, 0xfd, 0x6f, 0x6f, 0xfc, 0x6a, 0x6a, 0xfc, 0x66, 0x66, 0xfb, 0x61, 0x62, 0xf3,
						0x00, 0x00, 0xff, 0xf1, 0xf1, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
						0xfe, 0xfd, 0x74, 0x74, 0xfc, 0x4f, 0x4f, 0xfb, 0x49, 0x49, 0xfa, 0x44, 0x44, 0xfa, 0x5d, 0x5d,
						0xf1, 0x00, 0x00, 0xff, 0xf1, 0xf1, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfd,
						0xfd, 0xfd, 0xfc, 0x70, 0x70, 0xfb, 0x4a, 0x49, 0xfb, 0x45, 0x45, 0xfa, 0x3f, 0x3f, 0xf9, 0x58,
						0x58, 0xef, 0x00, 0x00, 0xfd, 0xf1, 0xf1, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfd, 0xfd, 0xfd,
						0xfd, 0xfc, 0xfd, 0xfc, 0x6c, 0x6c, 0xfb, 0x45, 0x45, 0xfa, 0x3f, 0x3f, 0xf9, 0x3a, 0x3a, 0xf9,
						0x54, 0x55, 0xed, 0x00, 0x00, 0xfd, 0xef, 0xf1, 0xfe, 0xfe, 0xfe, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd,
						0xfd, 0xfc, 0xfc, 0xfc, 0xfb, 0x68, 0x68, 0xfa, 0x40, 0x40, 0xf9, 0x3a, 0x3a, 0xf8, 0x34, 0x34,
						0xf8, 0x50, 0x50, 0xed, 0x00, 0x00, 0xfd, 0xef, 0xef, 0xfd, 0xfd, 0xfe, 0xfd, 0xfd, 0xfd, 0xfc,
						0xfc, 0xfc, 0xfb, 0xfb, 0xfb, 0xfa, 0x64, 0x64, 0xf9, 0x3b, 0x3a, 0xf8, 0x34, 0x34, 0xf7, 0x2e,
						0x2e, 0xf7, 0x4b, 0x4b, 0xeb, 0x00, 0x00, 0xfd, 0xed, 0xed, 0xfd, 0xfd, 0xfd, 0xfc, 0xfc, 0xfc,
						0xfb, 0xfb, 0xfb, 0xfa, 0xfa, 0xfa, 0xf9, 0x60, 0x60, 0xf8, 0x35, 0x35, 0xf7, 0x2f, 0x2f, 0xf6,
						0x29, 0x29, 0xf7, 0x46, 0x46, 0xe9, 0x00, 0x00, 0xfb, 0xed, 0xed, 0xfc, 0xfc, 0xfc, 0xfb, 0xfb,
						0xfb, 0xfa, 0xfa, 0xfa, 0xf9, 0xf9, 0xf9, 0xf8, 0x5b, 0x5b, 0xf7, 0x2f, 0x2f, 0xf6, 0x2a, 0x2a,
						0xf5, 0x23, 0x23, 0xf6, 0x42, 0x42, 0xe7, 0x00, 0x00, 0xf9, 0xeb, 0xeb, 0xfc, 0xfc, 0xfc, 0xfa,
						0xfa, 0xfa, 0xf9, 0xf9, 0xf9, 0xf8, 0xf8, 0xf8, 0xf7, 0x56, 0x57, 0xf6, 0x2a, 0x2a, 0xf5, 0x24,
						0x24, 0xf4, 0x1e, 0x1e, 0xf5, 0x3d, 0x3d, 0xe5, 0x00, 0x00, 0xf7, 0xe9, 0xe9, 0xfb, 0xfb, 0xfb,
						0xf9, 0xf9, 0xf9, 0xf8, 0xf8, 0xf8, 0xf7, 0xf7, 0xf7, 0xf6, 0x52, 0x52, 0xf5, 0x24, 0x24, 0xf4,
						0x1f, 0x1f, 0xf3, 0x19, 0x19, 0xf4, 0x39, 0x39, 0xe3, 0x00, 0x00, 0xf5, 0xe7, 0xe7, 0xfa, 0xfa,
						0xfa, 0xf8, 0xf8, 0xf8, 0xf7, 0xf7, 0xf7, 0xf6, 0xf6, 0xf6, 0xf5, 0x4d, 0x4d, 0xf4, 0x1f, 0x1f,
						0xf3, 0x19, 0x19, 0xf2, 0x13, 0x13, 0xf3, 0x35, 0x35, 0xe1, 0x00, 0x00, 0xf3, 0xe5, 0xe5, 0xf9,
						0xf9, 0xf9, 0xf7, 0xf7, 0xf7, 0xf6, 0xf6, 0xf6, 0xf5, 0xf5, 0xf5, 0xf4, 0x48, 0x48, 0xf3, 0x19,
						0x19, 0xf2, 0x14, 0x14, 0xf1, 0x0f, 0x0e, 0xf2, 0x32, 0x32, 0xdf, 0x00, 0x00, 0xf1, 0xe3, 0xe3,
						0xf8, 0xf8, 0xf8, 0xf6, 0xf6, 0xf6, 0xf5, 0xf5, 0xf5, 0xf4, 0xf4, 0xf4, 0xf3, 0x44, 0x44, 0xf2,
						0x14, 0x14, 0xf2, 0x10, 0x10, 0xf1, 0x0b, 0x0b, 0xf2, 0x2f, 0x2f, 0xdd, 0x00, 0x00, 0xef, 0xe1,
						0xe1, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf6, 0xf6, 0xf6, 0xf5, 0xf5, 0xf5, 0xf4, 0x5f, 0x5f,
						0xf4, 0x36, 0x36, 0xf3, 0x32, 0x32, 0xf2, 0x2f, 0x2f, 0xf2, 0x2c, 0x2c, 0xdd, 0x00, 0x00, 0xed,
						0xdf, 0xdf, 0xeb, 0xdd, 0xdd, 0xe9, 0xd9, 0xd9, 0xe7, 0xd7, 0xd7, 0xe7, 0xd5, 0xd5, 0xe5, 0x00,
						0x00, 0xe3, 0x00, 0x00, 0xdf, 0x00, 0x00, 0xdf, 0x00, 0x00, 0xdd, 0x00, 0x00, 0xdd, 0x00, 0x00};
	HDC			hdcNowy;// dodatkowe HDC
	BITMAPINFO	bi;
	HBITMAP		bmp;	// nowa bitmapa z flagą
	HBITMAP		hbmOld;	// domyslna bitmapa dodatkowego HDC
	UINT	  * pPixels = 0;
	unsigned __int32 * pBuffer;

	hdcNowy = CreateCompatibleDC( hdc );

	bi.bmiHeader.biSize			= sizeof(bi.bmiHeader);
    bi.bmiHeader.biWidth		= 16;
    bi.bmiHeader.biHeight		= 11;
    bi.bmiHeader.biPlanes		= 1;
    bi.bmiHeader.biBitCount		= 24;
    bi.bmiHeader.biCompression	= BI_RGB;
	bi.bmiHeader.biSizeImage	= 0;
    bi.bmiHeader.biClrUsed		= 0;
	bi.bmiHeader.biClrImportant = 0;

	bmp = CreateDIBSection( hdcNowy, &bi, DIB_RGB_COLORS, 0, 0, 0);
	hbmOld = (HBITMAP)SelectObject(hdcNowy, bmp);

	SetDIBits( hdcNowy, bmp, 0, 11, piksel, &bi, DIB_RGB_COLORS );
	BitBlt( hdc, 0, 0, 16, 11, hdcNowy, 0, 0, SRCCOPY );

	SelectObject( hdcNowy, hbmOld );	// przywrócenie domyslnej bitmapy
	DeleteDC( hdcNowy );				// usunięcie dodatkowego HDC
	DeleteObject( bmp );				// usunięcie bitmapy
}
// PROCEDURA KONTROLKI
static LRESULT CALLBACK LangProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )
{
	HDC			hdc;	// wyłącznie do rysowania
	PAINTSTRUCT	ps;		// wyłącznie do rysowania

	switch ( message )
	{
	case WM_PAINT:
		hdc = BeginPaint( hwnd, &ps );
		DrawFlag( hwnd, hdc ); 
		EndPaint( hwnd, &ps );
		return 0;
        
	case WM_DESTROY:
		PostQuitMessage( 0 );
		break;
	}
	return DefWindowProc( hwnd, message, wParam, lParam );
}
bool CtrlLangButton()
{
	WNDCLASSEX	wc;

	wc.cbSize			= sizeof( WNDCLASSEX );
	wc.style			= 0;
	wc.lpfnWndProc		= LangProc;
	wc.cbClsExtra		= 0;
	wc.cbWndExtra		= 0;
	wc.hInstance		= GetModuleHandle( 0 );
	wc.hbrBackground	= (HBRUSH)CreateSolidBrush( RGB( 229, 229, 229 ) );
	wc.hIcon			= 0;
	wc.hIconSm			= 0;
	wc.hCursor			= LoadCursor( 0, IDC_ARROW );
	wc.lpszClassName	= L"LangButton";
	wc.lpszMenuName		= 0;

	if ( !RegisterClassEx( &wc ) )
		return false;
	return true;
}
// PROCEDURA GŁÓWNEGO OKNA
static LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )
{
	switch ( message )
	{
	case WM_CREATE:
		CreateWindowEx( 0, L"LangButton", 0, WS_CHILD | WS_VISIBLE, 10, 10, 26, 26, hwnd, 0, GetModuleHandle( 0 ), 0 );
		return 0;

	case WM_CLOSE:
		DestroyWindow( hwnd );
		break;
        
	case WM_DESTROY:
		PostQuitMessage( 0 );
		break;
	}
	return DefWindowProc( hwnd, message, wParam, lParam );
}
// MAIN
INT WINAPI WinMain( HINSTANCE instance, HINSTANCE prevInstance, LPSTR cmdLine, INT cmdShow )
{
	MSG		msg;
	HWND		hwnd;
	WNDCLASSEX	wc;
	
	wc.cbSize			= sizeof( WNDCLASSEX );
	wc.style			= 0;
	wc.lpfnWndProc		= WndProc;
	wc.cbClsExtra		= 0;
	wc.cbWndExtra		= 0;
	wc.hInstance		= GetModuleHandle( 0 );
	wc.hbrBackground	= (HBRUSH)GetStockObject( WHITE_BRUSH );
	wc.hIcon			= LoadIcon( 0, IDI_APPLICATION );
	wc.hIconSm			= LoadIcon( 0, IDI_APPLICATION );
	wc.hCursor			= LoadCursor( 0, IDC_ARROW );
	wc.lpszClassName	= L"MainWindow";
	wc.lpszMenuName		= 0;

	RegisterClassEx( &wc );
	
	CtrlLangButton();

	hwnd = CreateWindowEx( 0, L"MainWindow", L"Okno", WS_OVERLAPPEDWINDOW, 50, 50, 350, 650, 0, 0, GetModuleHandle( 0 ), 0 );

	ShowWindow( hwnd, SW_SHOW );
	UpdateWindow( hwnd );

	while ( GetMessage( &msg, 0, 0, 0 ) ) //oczekiwanie na komunikat
	{
		TranslateMessage( &msg );	
		DispatchMessage( &msg );
	}
	return msg.wParam;
}
0

Jaki to jest link do bitmapy jak masz jak byk że to PNG.

0

imageshack.us sam zmienia na png.
Można kliknąć zapisz obraz jako i wybrać bmp lub paintem otworzyć i kliknąć zapisz jako bmp.
Jak ładuję ten plik za pomocą LoadImage() to działa bez problemu.
Nie chcę tego ładować za pomocą LoadImage() tylko inicjalizować wypełnioną tablicą pikseli.

Ewentualnie mogę podesłać poszczególne bajty z Hex Editor'a

0

Tylko chodzi ze ja chcę oryginalną bitmapę a nie skonwertowaną przez siebie. Spakuj ją i daj na normalny hosting plików np. http://wyslijto.pl/

0

To masz poprawne bajty tej bitmapy http://wyslijto.pl/plik/fhttmbkf36 bo to co dajesz w kodzie to nie wiem skąd. I oczywiście działa.

0

Chyba cię ozłocę. Stokrotne dzięki. Powiedz mi tylko jeszcze dlaczego takie bajty (tak wiem takie są w pliku bmp).
Ale
Pierwsze 3 bajty powinny dać kolor taki mocno wyblakły czerwony natomiast 0x00, 0x00, 0xF5 daje mocny niebieski.
Ten wyblakły czerwony powinny dać wartości 0xff, 0xf1, 0xf1.

I dokładnie takie wartości dostałem kiedy wykonałem tą pętlę:

for ( int x = 0; x < 16; x++ )
	{
		for ( int y = 0; y < 11; y++ )
		{
			color = GetPixel( hdcNowy, x, y );

			rgb = GetRValue( color );
			fwrite( &rgb, 1, 1, file );

			rgb = GetGValue( color );
			fwrite( &rgb, 1, 1, file );

			rgb = GetBValue( color );
			fwrite( &rgb, 1, 1, file );
		}
	}

na HDC do którego załadowałem bitmapę z pliku za pomocą LoadImage()

0

Poczytaj sobie jak są zapisywane piksele w bitmapie choćby http://en.wikipedia.org/wiki/BMP_file_format pierwsze 3 bajty to wartość pierwszego piksela ale w ostatnim rzędzie czyli lewy dolny róg bitmapy.

0

ten kod można trochę uprościć.

static void DrawFlag( HWND hwnd, HDC hdc )
{
        char        piksel[] = {
    0x00, 0x00, 0xF5, 0x00, 0x00, 0xF3, 0x00, 0x00, 0xF1, 0x00, 0x00, 0xEF, 0x00, 0x00, 0xED, 0x00, 
    0x00, 0xED, 0x00, 0x00, 0xEB, 0x00, 0x00, 0xE9, 0x00, 0x00, 0xE7, 0x00, 0x00, 0xE5, 0x00, 0x00, 
    0xE3, 0x00, 0x00, 0xE1, 0x00, 0x00, 0xDF, 0x00, 0x00, 0xDD, 0x00, 0x00, 0xDD, 0x00, 0x00, 0xDD, 
    0x00, 0x00, 0xF7, 0x62, 0x61, 0xFB, 0x5D, 0x5D, 0xFA, 0x58, 0x58, 0xF9, 0x55, 0x54, 0xF9, 0x50, 
    0x50, 0xF8, 0x4B, 0x4B, 0xF7, 0x46, 0x46, 0xF7, 0x42, 0x42, 0xF6, 0x3D, 0x3D, 0xF5, 0x39, 0x39, 
    0xF4, 0x35, 0x35, 0xF3, 0x32, 0x32, 0xF2, 0x2F, 0x2F, 0xF2, 0x2C, 0x2C, 0xF2, 0x00, 0x00, 0xDD, 
    0x00, 0x00, 0xF9, 0x66, 0x66, 0xFC, 0x44, 0x44, 0xFA, 0x3F, 0x3F, 0xFA, 0x3A, 0x3A, 0xF9, 0x34, 
    0x34, 0xF8, 0x2E, 0x2E, 0xF7, 0x29, 0x29, 0xF6, 0x23, 0x23, 0xF5, 0x1E, 0x1E, 0xF4, 0x19, 0x19, 
    0xF3, 0x13, 0x13, 0xF2, 0x0E, 0x0F, 0xF1, 0x0B, 0x0B, 0xF1, 0x2F, 0x2F, 0xF2, 0x00, 0x00, 0xDF, 
    0x00, 0x00, 0xFB, 0x6A, 0x6A, 0xFC, 0x49, 0x49, 0xFB, 0x45, 0x45, 0xFB, 0x3F, 0x3F, 0xFA, 0x3A, 
    0x3A, 0xF9, 0x34, 0x34, 0xF8, 0x2F, 0x2F, 0xF7, 0x2A, 0x2A, 0xF6, 0x24, 0x24, 0xF5, 0x1F, 0x1F, 
    0xF4, 0x19, 0x19, 0xF3, 0x14, 0x14, 0xF2, 0x10, 0x10, 0xF2, 0x32, 0x32, 0xF3, 0x00, 0x00, 0xDF, 
    0x00, 0x00, 0xFD, 0x6F, 0x6F, 0xFD, 0x4F, 0x4F, 0xFC, 0x49, 0x4A, 0xFB, 0x45, 0x45, 0xFB, 0x40, 
    0x40, 0xFA, 0x3A, 0x3B, 0xF9, 0x35, 0x35, 0xF8, 0x2F, 0x2F, 0xF7, 0x2A, 0x2A, 0xF6, 0x24, 0x24, 
    0xF5, 0x1F, 0x1F, 0xF4, 0x19, 0x19, 0xF3, 0x14, 0x14, 0xF2, 0x36, 0x36, 0xF4, 0x00, 0x00, 0xE3, 
    0x00, 0x00, 0xFD, 0x8E, 0x8E, 0xFE, 0x74, 0x74, 0xFD, 0x70, 0x70, 0xFC, 0x6C, 0x6C, 0xFC, 0x68, 
    0x68, 0xFB, 0x64, 0x64, 0xFA, 0x60, 0x60, 0xF9, 0x5B, 0x5B, 0xF8, 0x57, 0x56, 0xF7, 0x52, 0x52, 
    0xF6, 0x4D, 0x4D, 0xF5, 0x48, 0x48, 0xF4, 0x44, 0x44, 0xF3, 0x5F, 0x5F, 0xF4, 0x00, 0x00, 0xE5, 
    0xF1, 0xF1, 0xFD, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFC, 0xFD, 0xFC, 
    0xFC, 0xFC, 0xFB, 0xFB, 0xFB, 0xFA, 0xFA, 0xFA, 0xF9, 0xF9, 0xF9, 0xF8, 0xF8, 0xF8, 0xF7, 0xF7, 
    0xF7, 0xF6, 0xF6, 0xF6, 0xF5, 0xF5, 0xF5, 0xF4, 0xF4, 0xF4, 0xF5, 0xF5, 0xF5, 0xD5, 0xD5, 0xE7, 
    0xF1, 0xF1, 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFD, 0xFD, 0xFD, 0xFD, 
    0xFD, 0xFD, 0xFC, 0xFC, 0xFC, 0xFB, 0xFB, 0xFB, 0xFA, 0xFA, 0xFA, 0xF9, 0xF9, 0xF9, 0xF8, 0xF8, 
    0xF8, 0xF7, 0xF7, 0xF7, 0xF6, 0xF6, 0xF6, 0xF5, 0xF5, 0xF5, 0xF6, 0xF6, 0xF6, 0xD7, 0xD7, 0xE7, 
    0xF1, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFD, 
    0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFC, 0xFC, 0xFC, 0xFB, 0xFB, 0xFB, 0xFA, 0xFA, 0xFA, 0xF9, 0xF9, 
    0xF9, 0xF8, 0xF8, 0xF8, 0xF7, 0xF7, 0xF7, 0xF6, 0xF6, 0xF6, 0xF7, 0xF7, 0xF7, 0xD9, 0xD9, 0xE9, 
    0xF1, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 
    0xFE, 0xFE, 0xFE, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFB, 0xFB, 
    0xFB, 0xFA, 0xFA, 0xFA, 0xF9, 0xF9, 0xF9, 0xF8, 0xF8, 0xF8, 0xF7, 0xF7, 0xF7, 0xDD, 0xDD, 0xEB, 
    0xF1, 0xF1, 0xFF, 0xF1, 0xF1, 0xFF, 0xF1, 0xF1, 0xFF, 0xF1, 0xF1, 0xFF, 0xF1, 0xF1, 0xFD, 0xF1, 
    0xEF, 0xFD, 0xEF, 0xEF, 0xFD, 0xED, 0xED, 0xFD, 0xED, 0xED, 0xFB, 0xEB, 0xEB, 0xF9, 0xE9, 0xE9, 
    0xF7, 0xE7, 0xE7, 0xF5, 0xE5, 0xE5, 0xF3, 0xE3, 0xE3, 0xF1, 0xE1, 0xE1, 0xEF, 0xDF, 0xDF, 0xED};

		BITMAPINFOHEADER bih = {sizeof(bih)};
		bih.biWidth = 16;
		bih.biHeight = 11;
		bih.biPlanes = 1;
		bih.biBitCount = 24;

		BITMAPINFO bi = {};
		bi.bmiHeader = bih;

		HBITMAP bmp = CreateDIBitmap(hdc, &bih, CBM_INIT, piksel, &bi, DIB_RGB_COLORS);
		HDC memdc = CreateCompatibleDC(hdc);
		SelectObject(memdc, bmp);
		BitBlt(hdc, 0, 0, bih.biWidth, bih.biHeight, memdc, 0, 0, SRCCOPY);
		DeleteObject(bmp);
		ReleaseDC(hwnd, memdc);
}
0

W porządku, ale nawet jeśli to moja bitmapa powinna się wymalować do góry nogami, a nie malowała się wcale.
Poczytam coś o tym.

1 użytkowników online, w tym zalogowanych: 0, gości: 1