Alpha in cpp

Status
Niet open voor verdere reacties.

timmie201

Gebruiker
Lid geworden
22 mei 2009
Berichten
26
Ik ben aan een bestaand project aan het werken genaamd Neoncube, dit project repaint de achtergrond van de application met deze code
Code:
			BITMAP	    bm;
			PAINTSTRUCT ps;

			HDC hdc		= BeginPaint(hWnd, &ps);
			HDC hdcMem	= CreateCompatibleDC(hdc);
			HBITMAP hbmOld	= (HBITMAP)SelectObject(hdcMem, hbmBackground);


			GetObject(hbmBackground, sizeof(bm), &bm);
			BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCCOPY);
			SelectObject(hdcMem, hbmOld);
			DeleteDC(hdcMem);

			EndPaint(hWnd, &ps);
Dat werkt perfect alleen ondersteund het geen Alpha in 32bit BMP files

Naar flink wat google kwam ik uit op hetvolgende (GDI+)
Code:
/ 1. Get info using bitmap handle: image size, bits
BITMAP bmpInfo;
::GetObject(m_hBitmap, sizeof(BITMAP), &bmpInfo);
int cxBitmap = bmpInfo.bmWidth;
int cyBitmap = bmpInfo.bmHeight;
void* bits = bmpInfo.bmBits;

// 2. Create & draw new GDI+ bitmap using bits with pixel format PixelFormat32bppARGB
Gdiplus::Graphics graphics(dcMemory);
Gdiplus::Bitmap bitmap(cxBitmap, cyBitmap, cxBitmap*4, PixelFormat32bppARGB, (BYTE*)bits);
graphics.DrawImage(&bitmap, 0, 0);

Ik heb op verschillende manieren geprobeert dit te combineren maar tevergeefs het is helaas niet gelukt, ik ben nog behoorlijk nieuw in de c++ wereld en nog vol in de leer en ik zou het fijn vinden als iemand me een beetje kan helpen met dit samenvoegen en het liefst ook uitleg wat je precies hebt gedaan zodat ik er ook nog is van leer.

Mvg, Tim
 
Jammer genoeg gebruik ik VC2010 ik heb van iemand gehoort dat de functie SetLayeredWindowAttributes de truc moet doen nu heb ik daar al mee gespeeld en op MSDN gelezen maar ik kom der niet echt in vooruit (Bijv als ik de RGB 0,255,0 doe dan zou hij elke groene pixel transperant maken maar heel het window word dan nogmaar 50% zichtbaar)
 
Ik neem aan dat je mijn post niet goed gelezen hebt aangezien ik daar namelijk een link geplaatst heb van het desbetreffende voorbeeld mocht je geen Dev-C++ hebben. In dit simpele voorbeeld staat de oplossing van je probleem. Kijk eens goed naar de 2 bitmap afbeeldingen en naar het Main.c bestand. Probeer zelf de oplossing te vinden en te implementeren, wil dit niet lukken laat dan zien waar je op vast loopt. Op deze manier leer je nog eens wat in plaats van een voorgekauwd antwoordt klakkeloos over te typen.
 
Dat heb ik al gedaan maar het werkt echt minimaal als ik hem op mijn buroblad laat opstarten dan is hij transperant, sleep ik hem van links naar rechts neemt hij gewoon de achtergrond mee, open ik bijv firefox en laat het window naar voren gaan dan is het transperante zwart, en het maakt mijn programma behoorlijk sloom

Na nog is wat spelen is het zowat gelukt met SetLayeredWindowAttributes ik heb de opacity (of hoe je dat ook spelt) 100% kunnen maken zodat hij niet meer zoals standaart 50% doorzichtig is nu is hij helenmaal zichtbaar en haalt hij elke groenen pixel weg.
Soms heeft hij alleen wat kuren als ik hem 3 keer achter elkaar opstart dan word het zwart maar hier maak ik wel iets op dat hij maar 1x kan worden opgestart

Bedankt voor de hulp DnB
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan