Oppure

Loading
17/05/10 6:58
xeeynamo
Ciao a tutti :D
Negli ultimi 3 giorni mi sono cimentato un pò nella programmazione con le WinApi (finalmente ho lasciato perdere i programmini in console e la pesantezza (rispetto al C) del C#).
Dove mi sono bloccato io è il creare un'immagine in runtime a 16 o 256 colori con una palette specifica.
I passaggi che devo fare risiedono tutti in un WM_PAINT:
- Elaboro i dati e metto tutto in un buffer
- Ne elaboro altri ricavando un array di tipo int dove contengo i colori rgb
? Creo un immagine Bitmap di tot pixel dal buffer usando l'array di colori
- Creo un secondo DC usango CreateCompatibleDC
- Seleziono la bitmap creata precedentemente con il nuovo DC
- Drawwo tutto su finestra usando il potentissimo BitBlt

e mi blocco proprio dove ho messo il '?'. Somebody can help me?
aaa
17/05/10 16:46
Dax89
Ciao xeeynamo!

Puoi postare il codice che hai scritto in WM_PAINT?
Ultima modifica effettuata da Dax89 17/05/10 16:46
aaa
17/05/10 18:34
xeeynamo
Postato originariamente da Dax89:

Ciao xeeynamo!

Puoi postare il codice che hai scritto in WM_PAINT?

Certo ;)
	case WM_PAINT:
		hdc = BeginPaint(hWnd, &ps);

		BYTE data[0x40];
		for(int i=0; i<0x40; i++)
			data[i] = rand()%0x100;
		BYTE pal[0x10];
		for(int i=0; i<0x10; i++)
			pal[i] = (rand()%0x100) | ((rand()%0x100)<<8) | ((rand()%0x100)<<16);
		dcBmp = CreateCompatibleDC(hdc);
		hBmp = ????
		SelectObject(dcBmp, hBmp);
		BitBlt(hdc, 0, 0, 8, 8, dcBmp, 0, 0, SRCCOPY);

		EndPaint(hWnd, &ps);
		break;


Genero una bmp e delle palette completamente casuali giusto per testare se il tutto si vedrà sull'applicazione una volta trovata la soluzione, poi metterò il contenuto che mi serve davvero. l'hBmp è l'handle che conterrà la bitmap. Dove ci sono i punti interrogativi andrà la funzione o la serie di algoritmi che mi permetterà di creare la bitmap a modo mio. Le variabili fuori lo switch sono queste
	PAINTSTRUCT ps;
	HDC hdc, dcBmp;
	HBITMAP hBmp;
aaa
18/05/10 16:28
Dax89
Per le Palette, hai dato un'occhiata queste due funzioni?

msdn.microsoft.com/en-us/library/…(v=VS.85).aspx
msdn.microsoft.com/en-us/library/…(v=VS.85).aspx

Se vuoi creare (e non caricare da file) una Bitmap, puoi usare CreateBitmap():

msdn.microsoft.com/en-us/library/…(VS.85).aspx

:)
Ultima modifica effettuata da Dax89 18/05/10 16:29
aaa
18/05/10 18:27
xeeynamo
Postato originariamente da Dax89:

Per le Palette, hai dato un'occhiata queste due funzioni?

msdn.microsoft.com/en-us/library/…(v=VS.85).aspx
msdn.microsoft.com/en-us/library/…(v=VS.85).aspx

Se vuoi creare (e non caricare da file) una Bitmap, puoi usare CreateBitmap():

msdn.microsoft.com/en-us/library/…(VS.85).aspx

:)


Già viste, però non ho capito come si utilizzano e googlando neanche ho trovato niente... CreatePalette gli passi come parametro LOGPALETTE che contiene palVersion e palNumEntries che non sò cosa siano e il PALETTEENTRY che accetta solo UN colore. Ok, facciamo finta che ho capito come si utilizza la funzione.. Seleziono la palette giusto? SelectPalette(hdc, la palette, 0); essa viene memorizzata nell'hdc e quando carico l'immagine in bmp grazie a CreateBitmap essa avrà i colori definiti dalla palette? Forse si, mi sono dato la risposta da solo, ma continuo a non capire come faccio a passare una serie di colori a CreatePalette...
aaa