Einzelnen Beitrag anzeigen

Benutzerbild von Dunkel
Dunkel

Registriert seit: 26. Mär 2007
Ort: Klingenstadt
541 Beiträge
 
Delphi 2007 Enterprise
 
#14

Re: TPCMDrawer - Bilder hören statt sehen

  Alt 2. Jan 2009, 01:37
Zitat von omata:
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...
Es ist zu wahr um schön zu sein...
  Mit Zitat antworten Zitat