Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   TPCMDrawer - Bilder hören statt sehen (https://www.delphipraxis.net/126624-tpcmdrawer-bilder-hoeren-statt-sehen.html)

Dunkel 30. Dez 2008 19:48

Re: TPCMDrawer - Bilder hören statt sehen
 
Zitat:

Zitat von rollstuhlfahrer
Es fehlt nur noch die Funktion, aus dem Ton ein Bild zurückzuholen

Ich könnte den Sonagramm-Visualisierungs-Teil aus AudioDB extrahieren und mit in die Klasse (in eine neue Klasse) packen. Mal schaun'.
Momentan bastle ich an einem GUI dafür, da könnte man dann auch ein "Livebild" während der Konvertierung anzeigen lassen.

Dunkel 1. Jan 2009 17:11

Re: TPCMDrawer - Bilder hören statt sehen
 
Ich hab' mal ein wenig dran weitergebastelt.

Das Demoprojekt ist jetzt auch endlich erwachsen, Laden von Bitmaps und JPEGs funktioniert via Drag&Drop aus dem Explorer, die Bilder können verkleinert/vergrößert werden, an diversen Einstellungen kann nach Lust und Laune herumgespielt werden, Threading ist endlich implementiert.

ToDos: Geschwindigkeit! Mal gucken, ob man Multithreading implementieren kann.

Viel Spaß damit!

omata 1. Jan 2009 22:55

Re: TPCMDrawer - Bilder hören statt sehen
 
Zitat:

Zitat von Dunkel
ToDos: Geschwindigkeit! ...

Schau dir doch mal Bitmap.ScanLine an, wenn du das anstelle von Canvas.Pixels verwendest, dann wird es kein Geschwindigkeitsproblem mehr geben.

Dunkel 2. Jan 2009 00:37

Re: TPCMDrawer - Bilder hören statt sehen
 
Zitat:

Zitat von omata
Zitat:

Zitat von Dunkel
ToDos: Geschwindigkeit! ...

Schau dir doch mal Bitmap.ScanLine an, wenn du das anstelle von Canvas.Pixels verwendest, dann wird es kein Geschwindigkeitsproblem mehr geben.

Ist schon implementiert. Entweder mache ich da was falsch oder es bringt doch nicht so viel.
Delphi-Quellcode:
procedure TPCMDrawerWorker.ReadPictureData;
type
  pixel = array[0..2] of byte;
var
  p : ^pixel;
  i: integer;
  r, g, b, c: byte;
  color, v: integer;
begin
  p := fBitmap.ScanLine[fBitmapPosCounter];
  for i := 0 to fBitmap.Width -1 do
  begin
    r := Byte(p^[0]);
    g := Byte(p^[1]);
    b := Byte(p^[2]);

    if fReverseColors then
      c := 255 - ((r+b+g) div 3)
    else
      c := ((r+b+g) div 3);

    v:= Trunc(c / 255 * fAmplitude);
    if v >= cIgnoreColorLower then
      fPixelData[i].Amplitude := v
    else
      fPixelData[i].Amplitude := 0;

    inc(p);
  end;
  Inc(fBitmapPosCounter);
end;
Multithreading (sprich das Aufteilen des Bildes in mehrere Abschnitte, welche dann autark bearbeitet werden) bringt auf meinem DualCore mit 2 Threads ungefähr 40 - 45 % mehr Geschwindigkeit. Immerhin... :cyclops:

Dunkel 23. Jan 2009 21:20

Re: TPCMDrawer - Bilder hören statt sehen
 
Lange nicht mehr dran weitergebastelt und doch ist zwischenzeitlich das Projekt gewachsen. :)

Ich hab mal ein neues ZIP-Archiv an den ersten Beitrag gepinnt. In ihr befindet sich ein etwas ausgereifter Editor, um Geräusche aus Bildern zu kreieren. Mit integriert ist auch eine Sonagramm-Visualisierung.

Den Quelltext der TPCMDrawer-Klasse muss ich noch ein wenig "schönschreiben", dann werde ich ihn auch im ersten Beitrag aktualisieren.

xZise 25. Jan 2009 17:20

Re: TPCMDrawer - Bilder hören statt sehen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe mir die "PCMDrawerDemoV0_2.zip", welche zwar mehrere Threads hat, aber nur ein Kern auslastet (22 - 25 %).

Außerdem dauert es 38 von 12 Sekunden? Abgesehen davon, sind das (wenns andersherum ist), fast 33 %, obwohl die Progressbar noch nicht mal etwas zeigt.

Ansonsten kann ich erstmal dazu nichts sagen.

MfG
xZise

Dunkel 30. Jan 2009 23:35

Re: TPCMDrawer - Bilder hören statt sehen
 
Zitat:

Zitat von xZise
Ich habe mir die "PCMDrawerDemoV0_2.zip", welche zwar mehrere Threads hat, aber nur ein Kern auslastet (22 - 25 %).

Außerdem dauert es 38 von 12 Sekunden? Abgesehen davon, sind das (wenns andersherum ist), fast 33 %, obwohl die Progressbar noch nicht mal etwas zeigt.

Ansonsten kann ich erstmal dazu nichts sagen.

MfG
xZise

Die Version, welche Du hast, kann zwar (theoretisch) mehr als einen Kern auslasten; diese tut es (auf Deinem Quad-Core) aber nicht!

Und das Problem, dass die vorhergesagte Laufzeit nicht stimmt, ist mir bekannt. Für's Beheben müsste ich Delphi starten: mal schaun', wann ich das das nächste Mal mache...

xZise 31. Jan 2009 23:51

Re: TPCMDrawer - Bilder hören statt sehen
 
Okay mit der PCMDrawerEditor.zip sind es immrhin 60 - 70 % :thumb:

MfG
xZise


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:27 Uhr.
Seite 2 von 2     12   

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