Registriert seit: 7. Jul 2006
453 Beiträge
Delphi 11 Alexandria
|
Re: Größe eines JPG feststellen?
28. Okt 2007, 23:27
Zitat von Lossy eX:
Das ganze geht auch mit einem TJPEGImage von Delphi. Sobald du LoadFromFile aufgerufen hast wird das Bild zwar in den Speicher geladen und die Infos ausgewertet aber noch nicht dekomprimiert. Sondern erst wenn DIBNeeded oder Bitmap.Assign(JPEG) aufgerufen wird. Und das laden der Infos geht innerhalb von 1-2 ms.
Hi..
ich habe das bis heute so gemacht:
Delphi-Quellcode:
procedure GetJPGSize(const sFile: string; var wWidth, wHeight: Word);
const
ValidSig: array[0..1] of Byte = ($FF, $D8);
Parameterless = [$01, $D0, $D1, $D2, $D3, $D4, $D5, $D6, $D7];
var
Sig: array[0..1] of byte;
f: TFileStream;
x: integer;
Seg: byte;
Dummy: array[0..15] of byte;
Len: word;
ReadLen: LongInt;
begin
FillChar(Sig, SizeOf(Sig), #0);
f := TFileStream.Create(sFile, fmOpenRead);
try
ReadLen := f.read(Sig[0], SizeOf(Sig));
for x := Low(Sig) to High(Sig) do
if Sig[x] <> ValidSig[x] then ReadLen := 0;
if ReadLen > 0 then
begin
ReadLen := f.read(Seg, 1);
while (Seg = $FF) and (ReadLen > 0) do
begin
ReadLen := f.read(Seg, 1);
if Seg <> $FF then
begin
if (Seg = $C0) or (Seg = $C1) then
begin
ReadLen := f.read(Dummy[0], 3); { don't need these bytes }
wHeight := ReadMWord(f);
wWidth := ReadMWord(f);
end
else
begin
if not (Seg in Parameterless) then
begin
Len := ReadMWord(f);
f.Seek(Len - 2, 1);
f.read(Seg, 1);
end
else
Seg := $FF; { Fake it to keep looping. }
end;
end;
end;
end;
finally
f.Free;
end;
end;
Nur habe ich festgestellt das es damit nicht immer funktioniert.
Gruss
Capo
Hotte
|
|
Zitat
|