AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Verständnisfrage: TImage

Ein Thema von SearchBot · begonnen am 9. Sep 2012 · letzter Beitrag vom 17. Sep 2012
Antwort Antwort
Medium

Registriert seit: 23. Jan 2008
3.689 Beiträge
 
Delphi 2007 Enterprise
 
#1

AW: Verständnisfrage: TImage

  Alt 16. Sep 2012, 01:14
Es ist der absolut übliche, und vermutlich auch performanteste Weg, ein Bitmap zu leeren, in dem man es wirklich einfach mit einem großen Rechteck übermalt.

Selbst 3D APIs machen das im Prinzip so, es ist auch auch der aus Computersicht offensichtlichste Weg. Der Speicher in dem das leere neu erzeugte Bild sein soll muss irgendwie initialisiert werden um nicht buntes Rauschen darin zu haben, also wird auch das Neu-Erzeugen einer frischen Instanz letztlich intern das frische neue Bitmap anfangs so "leeren" müssen. Warum dann erst den ganzen Aufwand drumrum mit verursachen?

Das Erzeugen neuer Instanzen bedingt hier insbesondere auch immer wieder Griffe in die GDI, was i.A. am Ende kaum besser sein kann. Vor allem nicht, wenn auch noch munter Größen neu angepasst werden müssen etc., wodurch schlimmstenfalls auch noch große Blöcke umher kopiert werden müssen - von den nötigen Allokationen mit ggf. Auslagern u.ä. mal ganz abgesehen. Es macht einfach null komma gar kein Sinn das so tun zu wollen.

Übermal einfach. Schnell, schlank, usus.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
SearchBot

Registriert seit: 27. Jun 2004
Ort: N-W vom Bodensee
328 Beiträge
 
Delphi 12 Athens
 
#2

AW: Verständnisfrage: TImage

  Alt 16. Sep 2012, 12:07
Es ist der absolut übliche, und vermutlich auch performanteste Weg, ein Bitmap zu leeren, in dem man es wirklich einfach mit einem großen Rechteck übermalt.
...
Übermal einfach. Schnell, schlank, usus.
Gefällt mir.
(Blöd daß es keinen Button/smiley dafür gibt )
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.689 Beiträge
 
Delphi 2007 Enterprise
 
#3

AW: Verständnisfrage: TImage

  Alt 16. Sep 2012, 22:36
Zusatz: Man könnte natürlich auch ein wenig freaky werden, sich den Pointer auf die Rohdaten abholen (Scanline), und da mit ZeroMemory() oder FillChar() rumfuchteln. Könnte sogar noch einen Happs flotter sein, man muss dabei nur aufpassen wie rum das Bitmap im Speicher liegt. (Normal ist Bottom-Up, also quasi falsch rum. Muss es aber nicht, und Windows entscheidet recht eigenmächtig wann das so ist )
So arg viel schneller sollte man damit aber im Mittel auch nicht werden, aaaber es würde wohl gehen und auch sehr schlank sein

Edit: Noch ein sehr schneller Weg: Eine Bitmap mit dem "Leerbild" vorhalten, und zum leeren dieses mit BitBlt() kopieren. Könnte sogar noch besser sein als das obige! (Zumindest etwas weniger "hacky")
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)

Geändert von Medium (16. Sep 2012 um 22:38 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.580 Beiträge
 
Delphi 12 Athens
 
#4

AW: Verständnisfrage: TImage

  Alt 17. Sep 2012, 02:01
Was mag wohl theoretisch schneller sein?

- etwas zu kopieren/abzumalen (viele Bytes von hier nach da kopieren)
- oder einen Eimer voll Farbe drüberzukippen (nur einen kleinen Wert laden und damit alles füllen)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.689 Beiträge
 
Delphi 2007 Enterprise
 
#5

AW: Verständnisfrage: TImage

  Alt 17. Sep 2012, 08:40
Der Vorteil dürfte hier aus BitBlt resultieren, da dieser imho große Blöcke am Stück bewegt, während ZeroMemory und FillChar letztlich eine Schleife über Bytes macht. Allerdings kennen ich die Interna von BitBlt zu wenig, man müsste es also mal testen. (Früher war sowas ja über den "Blitter" quasi Hardware-beschleunigt, es käme also darauf an, ob bei BitBlt ebenfalls ähnliche Dinge hinter stecken, oder auch das am Ende nur eine Read-Write-Loop auf Bytes ist.)
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz