schnelles Transparentes Blitten
-
ich habe ein funktion geschrieben die einen blit durchführt ohne die Farbe Schwarz(0) mit in den Zielkontext zu übertragen.Mich interessiert nun wie schnell diese Funktion auf einem langsameren Rechner ist zB auf einem 386
hier die Funktion:
int AlphaBlt(HDC dest,int x,int y,int cx,int cy,HDC src,int sx,int sy) { HBITMAP mono; HDC alpha; mono=CreateBitmap(GetDeviceCaps(src,HORZRES),GetDeviceCaps(src,VERTRES),1,1,0); alpha=CreateCompatibleDC(dest); SelectObject(alpha,mono); SetBkColor(src,0); BitBlt(alpha,x,y,cx,cy,src,sx,sy,SRCCOPY); BitBlt(dest,x,y,cx,cy,alpha,sx,sy,SRCAND ); BitBlt(dest,x,y,cx,cy,src,sx,sy,SRCPAINT ); DeleteDC(alpha); DeleteObject(mono); return 0; }
mit etwa solchem Code habe ich gemessen:
case WM_LBUTTONDOWN: time_count=GetTickCount(); for(i=0;i<10000;++i) AlphaBlt(paint,0,0,100,100,src,0,0); wsprintf(buffer,"Es dauerte %d Millisekunden",GetTickCount()-time_count); MessageBox(NULL,buffer,"PerfomanceTest",MB_OK); return 0;
int time_count;
buffer ist ein char-Array.Es wäre sehr nett wenn das mal schnell jemand durch den Compiler jagen könnte und es auf einem langsamen Rechner testet.Wo könnte ich da noch optimieren?
-
Also ich nehm für sowas immer ColorKeys :D.
Kann's aber nicht testen, hab nen 2GHz, da wird es wahrscheinlich recht schnell laufen ;).
cya
-
hat die WinApi den sowas?ColorKeys gibs doch bei DX...
-
who cares ob n 386er noch schnell genug is..gibts noch irgednjemand der son teil zuhaus hat?!
ich mach geschwindigkeitstests immer so: lass die Funktion einfach mit ner Schleife paar 1000 mal durchlaufen, dann schaust du mittels GetTickCount() etc. nach wie lang es gedauert hat und vergleichst den Wert, indem du des Ganze nochmal mit normalem Blitten machst und auch die Zeit misst
-
Nein, bei WinAPI gibt das IMHO nicht, aber wenn er _schnelle_ Grafikanwendungen machen will, sollte er ja auch DX nehmen :).
cya