Guarda che secondo me anche solo semplicemente facendo così (come spiegato nel primo post)
miglioreresti le prestazioni in maniera notevolissima, dal momento che in quel ciclo l'operazione di gran lunga più lenta è l'acquisizione e il rilascio del DC.codice:HDC hdcScreen = GetDC(0); for(int t=0;t<40000;t++) { for(int X=0;X<1280;X++) { /* ... */ for(int Y=0;Y<800;Y++) { COLORREF colore = GetPixel(hdcScreen, X, Y); /* ... */ } } /* ... */ } ReleaseDC(0, hdcScreen);
Credo che questo risponderebbeP.S.![]()
![]()
a chi ha inventato la funzione getpixel.....
Tra l'altro comunque è più che normale che la GetPixel sia lenta... hai idea della complicazione che ci sta dietro alla GDI? Ogni singola chiamata a GetPixel deve passare da user mode a kernel mode (e solo il trapping nel kernel consuma centinaia di migliaia di cicli di CPU), e la GetPixel in questione deve essere in grado di darti il colore RGB di un pixel del dispositivo collegato a qualunque DC, che internamente potrebbe memorizzare il colore nella maniera più astrusa (tripletta RGB, COLORREF, indice in una tabella di colori RGB o in modi ancora più esotici).![]()
![]()
a chi non sa usare le funzioni GDI e acquisisce e rilascia 40000*1280*800=40960000000 (40 miliardi e 960 milioni) di volte un device context quando basterebbe acquisirlo all'inizio di tutto e rilasciarlo alla fine...
![]()
La morale è: se ti sembra che il codice di libreria sia troppo lento, probabilmente lo stai usando in modo sbagliato.