AGB  ·  Datenschutz  ·  Impressum  







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

Optimierung von Pixel

Ein Thema von EWeiss · begonnen am 7. Apr 2016 · letzter Beitrag vom 12. Apr 2016
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

AW: Optimierung von Pixel

  Alt 8. Apr 2016, 11:58
Mediums Funktion ist sogar LANGSAMER als Canvas.Pixels Mein Testcode
Delphi-Quellcode:
var
  B: TBitmap;
  X, Y: Integer;
  P: PRGBTriple;
  C: Cardinal;
begin
  B := TBitmap.Create;
  try
    B.PixelFormat := pf24Bit;
    B.Width := 2000;
    B.Height := 2000;
    // Canvas.Pixels
    C := GetTickCount;
    for Y := 0 to B.Height - 1 do
    begin
      for X := 0 to B.Width - 1 do
      begin
        B.Canvas.Pixels[X, Y] := clRed;
      end;
    end;
    ShowMessage(IntToStr(GetTickCount - C)); // 1141ms
    // Custom SetPixel method by Medium
    C := GetTickCount;
    for Y := 0 to B.Height - 1 do
    begin
      for X := 0 to B.Width - 1 do
      begin
        SetPixel(B, X, Y, clRed);
      end;
    end;
    ShowMessage(IntToStr(GetTickCount - C)); // 1391ms
    // Bitmap.ScanLine
    C := GetTickCount;
    for Y := 0 to B.Height - 1 do
    begin
      P := B.ScanLine[Y];
      for X := 0 to B.Width - 1 do
      begin
        P^.rgbtRed := 255;
        P^.rgbtGreen := 0;
        P^.rgbtBlue := 0;
        Inc(P);
      end;
    end;
    ShowMessage(IntToStr(GetTickCount - C)); // 15ms
  finally
    B.Free;
  end;
end;
produziert folgendes Ergebnis:
Code:
1141ms - Canvas.Pixels
1391ms - SetPixel by Medium
  15ms - ScanLine
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl ( 8. Apr 2016 um 12:12 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.358 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Optimierung von Pixel

  Alt 8. Apr 2016, 12:17
@Emil

Bei Performanceproblemen hat mit AQTime Pro schon gut geholfen.
Da kann man sogar einzelne Zeilen messen lassen.

Nur man sollte es nicht in die Delphi-IDE Einbinden, sondern extern nutzen.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: Optimierung von Pixel

  Alt 8. Apr 2016, 12:23
@Emil

Bei Performanceproblemen hat mit AQTime Pro schon gut geholfen.
Da kann man sogar einzelne Zeilen messen lassen.

Nur man sollte es nicht in die Delphi-IDE Einbinden, sondern extern nutzen.
Danke für die Info
Aber eigentlich sollte doch GetTickCount ausreichend sein

Zitat:
Mein Testcode
Danke werde deine Variante mal testen.

gruss
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#4

AW: Optimierung von Pixel

  Alt 8. Apr 2016, 12:41
Roter Kasten:

Mediums Funktion ist sogar LANGSAMER als Canvas.Pixels
Das wundert mich ehrlich gesagt, aber da ich keine konkreten Tests gemacht habe, nehme ich das mal so hin
"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
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

AW: Optimierung von Pixel

  Alt 8. Apr 2016, 12:58
Roter Kasten:

Mediums Funktion ist sogar LANGSAMER als Canvas.Pixels
Das wundert mich ehrlich gesagt, aber da ich keine konkreten Tests gemacht habe, nehme ich das mal so hin
Hat mich selbst stark gewundert, weil der erste Aufruf von ScanLine den Bitmap-Buffer eigentlich cached. Allerdings werden da neben dem Anfordern des Buffers noch 100 andere Sachen in der Funktion gemacht, die ich mir jetzt nicht genauer angeschaut habe. Diese Funktionen werden wohl der Grund für den Performanceverlust sein.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#6

AW: Optimierung von Pixel

  Alt 8. Apr 2016, 13:01
Man könnte ja mal spaßeshalber eine Art Zwischenspeicher für das Ergebnis von ScanLine einführen.

Code:
if aY != old_aY:
    old_aY = aY
    scanlineResult = ScanLine(..., aY)
// mit scanlineResult weiter verfahren
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: Optimierung von Pixel

  Alt 8. Apr 2016, 13:09
Ich habe jetzt alle Varianten durch und lade das Projekt mal hoch. (Anhang gelöscht neue auf der nächsten Seite)

Seltsamer weise tut die Funktion von Zacherl nicht was sie soll.. Oder ich war zu blöd diese einzubinden.
Die neue von Medium liefert auch nicht das richtige Zeichnungs Resultat.

wäre schön wenn ihr das mal testen würdet.
alte Version ohne Änderung.

wundert mich schon warum der Kram so lange dauert bei analysieren.
Was nicht geht ist das auf die nächste Seite gesprungen wird.

PS:
Nicht wundern!
00:00:00 = Min,Sec,Ms

gruss

Geändert von EWeiss ( 8. Apr 2016 um 14:32 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#8

AW: Optimierung von Pixel

  Alt 8. Apr 2016, 13:48
PB.Refresh verbraucht fast deine ganze CPU Zeit.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#9

AW: Optimierung von Pixel

  Alt 8. Apr 2016, 13:51
PB.Refresh verbraucht fast deine ganze CPU Zeit.
Ist richtig deshalb dauert es auch so lange..
Habe es deaktiviert. Auch wenn es schöner wäre die Fortschritte des ladens zu sehen.

Auf der anderen Seite hat es keinen Einfluss darauf ob ScanLine schneller als Pixel ist.
Macht bei mir nach dem deaktivieren von PB.Refresh gerade mal eine Sekunde aus.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#10

AW: Optimierung von Pixel

  Alt 8. Apr 2016, 13:57
Habe es deaktiviert. Auch wenn es schöner wäre die Fortschritte des ladens zu sehen.
Habe es bei mir zum Testen ebenfalls auskommentiert. Das Application.ProcessMessages auch. Trotzdem sehe ich den Fortschritt .. ist das bei dir nicht der Fall?

Auf der anderen Seite hat es keinen Einfluss darauf ob ScanLine schneller als Pixel ist.
Macht bei mir nach dem deaktivieren von PB.Refresh gerade mal eine Sekunde aus.
Der Vorteil skaliert halt stark mit der Größe des Bitmaps. Würde auf jeden Fall trotzdem ScanLine benutzen.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 06:07 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