Einzelnen Beitrag anzeigen

Benutzerbild von Hador
Hador

Registriert seit: 11. Dez 2004
Ort: Recke
682 Beiträge
 
Turbo Delphi für Win32
 
#1

Stream schnell durchsuchen

  Alt 26. Nov 2006, 23:43
Irgendwie klappt heute nicht allzuviel allzu gut
3 Threads an einem Abend gab's bei mir noch nie.

Folgendes:
Ich versuche das Thumb aus einem RAW-Photo zu extrahieren.
Die Bilddaten beginnen dabei beim Offset $2600.
Um das Ende des JPEG-Thumbs zu finden, durchsuche ich folgend dann den Stream nach "$FF$D9".
Klappt auch soweit ganz gut.
Allerdings dauert das ganze bei meiner Implementation ewig lange.
Es muss doch irgendeine schnellere Möglichkeit geben oder mein Code sollte sich zumindest optimieren lassen.
Hat irgendeiner eine Idee?

Hier der Quellcode:
Delphi-Quellcode:
procedure TImgViewerForm.LoadCR2Thumb(const AFileName: String);
var
  FS: TFileStream;
  MS: TMemoryStream;
  B: Byte;
  JPG: TJpegImage;
  c: Integer;
begin
  FS := TFileStream.Create(AFileName, fmOpenRead);
  FS.Seek($2600, soFromBeginning);

  MS := TMemoryStream.Create;
  while True do
  begin
    FS.Read(B, 1);
    if B = $FF then
    begin
      FS.Read(B, 1);
      Inc(c);
      if B = $D9 then
      begin
        c := FS.Position - $2600;
        Break;
      end;
    end;
    if (FS.Position = FS.Size) then
      Exit;
  end;
  FS.Seek($2600, soFromBeginning); // Ab hier geht dann alles ganz schnell. Nur die vorangehende Schleife ist super lahm.
  MS.CopyFrom(FS, c);
  MS.Seek(0, soBeginning);
  JPG := TJPEGImage.Create;
  JPG.LoadFromStream(MS);

  Img.Picture.Assign(JPG);
  JPG.Free;
  MS.Free;
  FS.Free;
end;
Lars Kiesow
http://www.larskiesow.de

Computer gehorchen deinen Befehlen, nicht deinen Absichten.
  Mit Zitat antworten Zitat