TFileStream i TJPEGImage

0

Jest sobie coś takiego:

var
Bmp1, Bmp2, ... , BmpN: TBitmap;
Jpg: TJPEGImage;
Plik: TFileStream;
begin
...
Plik := TFileStream.Create('...',fmOpenRead);
Jpg := TJPEGImage.Create;
Jpg.LoadFromStream(Plik);
Bmp1 := TBitmap.Create;
Bmp1.Assign(Jpg);
(to samo z resztą bitmap)
Plik.Free;
...
end;

Zapis był w podobny sposób, tj. po kolei każdy JPEG. I teraz: pierwszy JPEG ładuje się bez problemu, ale następne nie. Co jest nie tak?

0
var
  Bmp1, Bmp2, ... , BmpN: TBitmap;
  Jpg: TJPEGImage;
  Plik: TFileStream;
begin
  ...
  Plik := TFileStream.Create('...',fmOpenRead);
  Jpg := TJPEGImage.Create;
  Jpg.LoadFromStream(Plik);
  Bmp1 := TBitmap.Create;
  Bmp1.Assign(Jpg);
  (to samo z resztą bitmap) //*
  Plik.Free;
  ...
end;
    • czyli jak?, robisz jeszcze raz Plik := TFileStream.Create('...',fmOpenRead); a potem zwalniasz Plik (czyli ostatni obiekt)?

I napisz co dokladnie jest nie tak...

...I dlaczego nie robisz po prostu Jpg.LoadFromFile?

0

Nie o to mi chodziło. Mam plik zapisany przy pomocy TFileStream, w którym jest ileśtam JPEG'ów. Błąd wyskakuje w czasie odczytu drugiego i następnych:

Bmp1 := TBitmap.Create;
Jpg.LoadFromStream(Plik);
Bmp1.Assign(Jpg);
Bmp2 := TBitma.Create;
Jpg.LoadFromStream(Plik); //Tutaj błąd
Bmp2.Assign(Jpg);
...
BmpN := TBitma.Create;
Jpg.LoadFromStream(Plik);
BmpN.Assign(Jpg);

I dopiero potem Plik.Free;

A dlaczego chcę użyć stream'a zamiast ładowania z pojedynczych plików? Żeby je ukryć, a nie, że mam <ort>nie wiadomo</ort> ile tego w katalogu. A dlaczego zapis w JPEG'u a przetwarzanie na BMP? Bo potrzebuję oszczędzania miejsca na dysku, ale bitmap w pamięci.

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