AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi TBitmap32 in ByteArray (schneller) oder Alternative
Thema durchsuchen
Ansicht
Themen-Optionen

TBitmap32 in ByteArray (schneller) oder Alternative

Ein Thema von Delphi-Narr · begonnen am 15. Apr 2013 · letzter Beitrag vom 16. Apr 2013
Antwort Antwort
Benutzerbild von Delphi-Narr
Delphi-Narr

Registriert seit: 29. Aug 2009
Ort: Duisburg
437 Beiträge
 
Delphi 2007 Professional
 
#1

AW: TBitmap32 in ByteArray (schneller) oder Alternative

  Alt 16. Apr 2013, 08:54
Also beide Varianten lösen dennoch Fehlermeldungen aus, die direkte Übergabe verändert dabei am Bildschirm rein gar nichts.
Der Pointer lässt ein paar wahllos platzierte Punkte erscheinen.
Die Übergabe des manuell erstellten Bytearrays führt zu einer korrekten Anzeige und einer anschließenden Fehlermeldung.
Ersetze ich das TBitmap32 durch TBitmap und verwende dann die Canvas Funktionen, so funktioniert die Anzeige anschließend ohne Problem und Fehler.

Es funktioniert auch ohne Fehler, wenn ich beim Bitmap32 die Farben über Canvas.Pixels abfrage. Dabei sind dann jedoch Rot und Blau vertauscht (ist ja an sich auch logisch).

So noch eine kleine Änderung, mit

Delphi-Quellcode:
P:=VirtualBitmap.Bits;
   for I := 0 to 320*240-1 do
    begin
      color:=WinColor(P[i]);
      R:=color and $FF;
      G:=(Color shr 8) and $FF;
      B:=(Color shr 16) and $FF;
      Pic2[I*4]:=R;
      Pic2[I*4+1]:=G;
      Pic2[I*4+2]:=B;
      Pic2[I*4+3]:=255;
    end;
klappt es eigentlich ganz gut, CPU Last ist jedoch immer noch bei 7%.

Geändert von Delphi-Narr (16. Apr 2013 um 09:13 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.196 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: TBitmap32 in ByteArray (schneller) oder Alternative

  Alt 16. Apr 2013, 09:25
Ich komme nicht ganz hinterher.

1) TByteArray
Das ist doch einfach nur type TByteArray = array [0..32767] of Byte; . Ich habe in Delphi (aus Zeitgründen) nach wie vor gewaltige Lücken, aber Delphi hat doch für Arrays wie für Strings bsp. Referenzzählung? Wer weiß, was da noch alles drinsteckt was die DLL eigentlich nicht brauchen kann und dementsprechend durcheinanderkommt. Ich verstehe das Schlüsselwort packed noch nicht wirklich, vielleicht kann das helfen?

2) Geschwindigkeit
Die CPU-Auslastung ist wirklich extrem hoch, ohne wirklich Ahnung zu haben würde ich die benutzten Delphi-Routinen bzgl. Farben beschuldigen. Kannst du mittels FillChar oder ähnlichem einfach das Bild immer Schwarz/Weiß flackern lassen? Hast du mal versucht mit einer TStopWatch zu messen, welche Aufrufe hier so lange brauchen?
  Mit Zitat antworten Zitat
Benutzerbild von Delphi-Narr
Delphi-Narr

Registriert seit: 29. Aug 2009
Ort: Duisburg
437 Beiträge
 
Delphi 2007 Professional
 
#3

AW: TBitmap32 in ByteArray (schneller) oder Alternative

  Alt 16. Apr 2013, 09:56
Also das von mir definierte ByteArray hat keine feste Größe, sondern kann dynamisch verändert werden.
Mit diesem Array aus Bytes kommt die DLL inzwischen auch wunderbar klar, wenn ich die Farben aus dem Bitmap32.Canvas.Pixels auslese und nicht aus Bitmap32.pixel
Somit wird die Anzeige jetzt recht flüssig dargestellt.
Wenn ich die gesamte Anzeige rausnehme (Sowohl das Erstellen als auch das Aufbereiten und Ausgeben), ist die CPU immernoch bei 7% - es liegt
anscheinend einfach daran, dass der Timer sehr sehr oft den Status der Buttons der G19 abfragt, um entsprechend zu reagieren.
Da währenddessen auch noch immer über eine OleVariant die aktuelle Titelposition, Name, Interpret, Album, Lautstärke etc. aus iTunes abgefragt werden, wird die CPU Auslastung
anscheinend doch hierbei erzeugt.
Die grafische Darstellung fällt dank Bitmap32 fast nicht mehr ins Gewicht.

Viele Grüße!
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.196 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: TBitmap32 in ByteArray (schneller) oder Alternative

  Alt 16. Apr 2013, 10:07
CPU-Auslastung gehört zu iTunes wie das Amen in der Kirche
  Mit Zitat antworten Zitat
Benutzerbild von Delphi-Narr
Delphi-Narr

Registriert seit: 29. Aug 2009
Ort: Duisburg
437 Beiträge
 
Delphi 2007 Professional
 
#5

AW: TBitmap32 in ByteArray (schneller) oder Alternative

  Alt 16. Apr 2013, 10:15
Das sowieso
Aber hier sind wohl doch die alle 20ms stattfindenden Abfragen Schuld
Das native Logitech Medienapplet schafft es auch, das alles ordentlich abzufangen und darzustellen, ohne eine ultimative CPU Auslastung zu haben.
Irgendeine Idee, wie ich das machen kann?
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.196 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: TBitmap32 in ByteArray (schneller) oder Alternative

  Alt 16. Apr 2013, 10:19
das alles ordentlich abzufangen und darzustellen, ohne eine ultimative CPU Auslastung zu haben.
Aber doch bestimmt nicht 50 mal pro Sekunde auf den Titel in iTunes, Lautstärke und sonstwas prüfen? Immer wenn ich so etwas irgendwo gesehen habe, waren da oft sogar Verzögerungen von einer bis zwei Sekunden im Spiel, so genau will sicher niemand wissen, was gerade aus den Lautsprechern kommt...

Ansonsten: Wirklich 7-8% Gesamt-CPU-Last? Oder 7-8% auf dem Kern?
  Mit Zitat antworten Zitat
Benutzerbild von Delphi-Narr
Delphi-Narr

Registriert seit: 29. Aug 2009
Ort: Duisburg
437 Beiträge
 
Delphi 2007 Professional
 
#7

AW: TBitmap32 in ByteArray (schneller) oder Alternative

  Alt 16. Apr 2013, 19:17
Es waren 7% auf der gesamten CPU.
Das hab ich jetzt auf 1-2 runtergeschraubt (sogar besser als das Logitech Standardmodul mit weniger Funktionen).
Die Exceptions treten immer dann auf, wenn ich auf die DLL Funktionen außerhalb der Timerprozedur zugreife. Liegt es daran, dass das nicht threadsicher ist?!
Solang alles in der Timerprozedur bleibt, ist es kein Problem.
Den Bildschirm kann ich weiterhin mit 10-20 fps betreiben, das interessiert die CPU inzwischen nicht mehr wirklich.

Vielen Dank für die Hilfe
  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 13:50 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