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;