Zitat von
Lossy eX:
GDI: Die Geschwindigkeit ist unterschiedlich. Das kommt ganz darauf an ob die Grafikkarte mit zur Beschleunigung genutzt wird oder nicht. Wenn du ein TBitmap erstellst dann solltest du in jedem Falle den HandleType auf bmDDB stellen. Dadurch weißt du der
GDI mit vorhandene Hardware benutzen zu dürfen. Wenn der auf bmDIB steht dann läuft alles auf der CPU ab. Ein frisch geladenes Bit steht auf bmDIB.
Wieso sollte DIB über die CPU ablaufen? Die Grafikkartentreiber können die
GDI Befehle durch eigene, beschleunigte Funktionen ersetzen. Wenn den neuen Implementierungen was nicht passt, rufen sie die langsamen Originalroutinen auf. die Standard
GDI von Windows macht eigentlich alles in Software und erst die Treiber sorgen für Geschwindigkeit. Warum aber ein DIB nicht beschleunigt werden sollte, ist mir ein Rätsel. Ein DDB bedeutet nichts weiter, als dass es ein Palette (falls benötigt) im aktuellen Context gestellt wird. Spätestens ab den nicht Paletten-basierenden Farbtiefen von 15 Bit und aufwärts ist keine mehr nötig und man hat die Pixelinformationen. Dabei rechnet der Treiber diese Informationen genauso schnell in das im Grafikkartenspeicher genutzte System um um es dann direkt zu verwenden. Bei den DDBs hast du nur mehr Probleme, u.a. bei paletten-basierenden Auflösungen etc und vor allem durch die entsprechende Anpassung der Farbpalette. Male auf einem 256 Farben Screen mit einer selbstgemischten Farbe auf einem DDB - die Farbe wird immer dem farblich nächsten Eintrag angepasst und entspricht nicht mehr deiner Mischung. Das RealizePalette() System klappt in der
VCL eh nicht ganz richtig und macht hier nur mehr Probleme.
Meine App arbeitet in der gesamten Firma auf den unterschiedlichsten Rechnern und Betriebssystem und genauso Auflösungen und unterschiedlichen Farbtiefen immer ohne flackern oder Verzögerungen. Selbst ein PII muckt nicht rum...
Zitat von
Lossy eX:
PPS: Wenn du auf die Scanlines zugreifen möchtest darfst du bmDDB nicht verwenden. Da dadurch die Scanlines nicht verfügbar sind. Du kannst es aber auch kurzzeitig umstellen.
Wobei dabei wieder die gesetzten (z.B.
RGB Werte) der aktuellen Palette des Devices angepasst werden und somit die Farben verändert werden.