AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Ein Bild mit einer Farbe multiplizieren?

Ein Bild mit einer Farbe multiplizieren?

Ein Thema von Cyberstorm · begonnen am 23. Jan 2008 · letzter Beitrag vom 28. Jan 2008
Antwort Antwort
Seite 4 von 4   « Erste     234
Benutzerbild von Lossy eX
Lossy eX

Registriert seit: 7. Aug 2007
113 Beiträge
 
#31

Re: Ein Bild mit einer Farbe multiplizieren?

  Alt 28. Jan 2008, 09:03
Erst mal was einfaches, was keinen Einfluss auf die Geschwindigkeit hat.

Das Int64($7FFFFFFFFFFFFFFF); geht auch einfacher und ohne Magic Number High(Int64);

Das Record TRGB ist nicht packed. Wenn du Alignment aktiviert hast, was standard der Fall ist, dann ist es in Wirklichkeit 4 Byte groß. Also für Dateien oder dierkten Speicherzugriff nur mit Vorsicht zu genießen.

Zu dem Algirithmus: Die Beste Optimierung ist, unnötige Dinge gar nicht erst auszuführen. So solltest du dir gut überlegen wie du den Code so umstellen kannst, dass keine doppelte Arbeit statt findet. Du vergleichst ein Bild mit allen anderen Bildern? Sehe ich das Richtig? Wenn ja, dann kannst du einiges an Zeit sparen, wenn du das aktuelle Bild nur mit den nachfolgenden Vergleichst. Kleines Beispiel mit 3 Bildern. Du vergleichst 1 mit 2 dann 1 mit 3. Wenn du jetzt 2 vergleichen willst, dann brauchst du es mit 1 nicht mehr vergleichen. Denn das wurde bereits bei dem ersten Bild verglichen. Also Musst du es nur noch mit 3 vergleichen. Sofern mein Kaffee heute schon ausreichend dosiert wurde.

Dann solltest du dir evtl mal in der CPU Ansicht anschauen was der Kompiler aus deiner Schleife gemacht hat. Delphi optimiert sicher einiges aber ich denke [i]Catalogs[CatID].PicInfoList.RefPoints[j, k]. wird er nicht hin bekommen. Der erste Teil dieser Zeile verändert sich nicht. Da solltest du entweder mit with [i]Catalogs[CatID].PicInfoList do arbeiten oder dir einen Pointer auf die Objekte holen.

Aber ich denke du solltest dir auch mal anschauen wo die meiste Zeit drauf geht. Also entweder über den High Performance Counter messen welche ausgewählt stelle wie viel Zeit benötigt. Oder mit einem Profiler (z.B.: aqTime) mal schauen. Von aqTime gibt es eine 30 Tage Testversion. Allerings wäre es da evtl auch ganz interessant zu sehen wie häufig das ein oder andere aufgerufen wird. Das geht aber nicht wenn alles in einer Methode ist. Da dann evtl mal kurzzeitig auslagern etc.

PS: Könnte es etwas bringen die AffinityMask der Threads entsprechend zu setzen? Denn sonst springen die Threads zwischen den Kernen hin und her. Evtl entlastet das auch deren Cache.

PPS: Gehört diese Frage nicht auch eher in ein neues Thema??
Ich habe ja keine Vorurteile gegenüber Autofahrern ... aber Fahrer von BMW und Mercedes bestätigen diese regelmäßig.
Außerdem neue technologische Errungenschaften: Serienmäßig eingebaute Rechtsfahrsperre und der stromsparende Blinker.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 21:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz