TMemoryStream

0

Mam malutki problem z tym....
czy ktos mi powie czym roznia sie te dwa wywolania? (po za oczywistym ze w jednym przypadku laduje z pliku a w drugim a TJpegImage)

var
  Jpg: TJpegImage;
  strim: TMemoryStream;
begin
try
  strim:= TMemoryStream.Create;
  Jpg:= TJpegImage.Create;
  Jpg.LoadFromFile('plik.jpg');
  strim.WriteBuffer(jpg, SizeOf(jpg));
finally
  Jpg.Free;
  strim.free;
end;
end;

var
  strim: TMemoryStream;
begin
  try  
  strim:= TMemoryStream.Create;
  strim.LoadFromFile('plik.jpg');
  finally
  strim.free;
  end;
end;

czyz efekt nie powinien byc taki sam?

0

Problem tkwi tutaj:

strim.WriteBuffer(jpg, SizeOf(jpg));

jpg - to w rzeczywistości wskaźnik i SizeOf(jpg) zawsze zwróci 4 !
Poza tym pierwszy argument przekazany do WriteBuffer też jest chyba nieprawidłowy.

Jeśli chcesz JPG-a zapisać do strumienia, to zrób to np. tak:

Jpg.SaveToStream(strim);
0

no jasne :) smiga niezle... dzieki :)

0

Odnośnie tego:

SizeOf(jpg)

to każdy obiekt w Delphi posiada metodę InstanceSize() (odziedziczoną po TObject), która zwraca rozmiar egzemplarza obiektu w bajtach.

1 użytkowników online, w tym zalogowanych: 0, gości: 1