// Hent en masse Bitmaps fra stream. BitMap := TBitmap.Create; Try S.Position := 0; For X := 1 To SomeNumberOfBitmaps Do Begin BitMap.LoadFromStream(S);
Dette virker fint (forudsat at jeg nu har skrevet syntaxen korrekt - det er lige ud af hånden)
Hvis vi så erstatter alle Bitmap (TBitMap) referencer i det ovenstående til JPEG (TJPEGImage), og husker at USES JPEG, så burde det ifølge mit lille hovede virker ligeså fint. Det gør det bare ikke. Første gang jeg læser en JPEG fra streamen, så kan jeg se at position bliver flyttet frem (en ca. 200 kByte, hvilket virker fint i forhold til den størrelse filer jeg arbejder med). men der bliver tilsyneladende ikke lagt noget image ind i JPEG komponenten. Anden gang jeg læser fra streamen i loopen går lortet ned med en Exception (Access violation).
Jeg har haft spørgsmålet posted i Borland.public.delphi.graphics og har der fået den noget nedslående melding:
*********************** > This is why I would assume that the object it self must load the > correct number of bytes.
That is the incorrect assumption (cfr my other mail). I do agree that it should have been a valid assumption, I do agree that we are talking about a graphics.pas / jpeg.pas bug here. ***********************
TJPEGImage\'s kan, p.g.a. \'fejl\' i Graphics.Pas og JPEG.Pas, simpelt hen ikke finde ud af at loade sig selv fra en stream, der indeholder mere end en frame. Trals, så istedet må jeg enten gemme i en stribe streams eller enkelte filer (med henholdsvis JPEG.SaveToStream og JPEG.SaveToFile).
Tyndt, det må man sige, der er sku da næsten basis for at lave et hack af en eller anden slag, så lortet kommer til at virke, du har ikke prøvet i D6 vel ?
Jeg har lukket spørgsmålet. I følge mine oplysninger, så har Borland lavet TJPEGImage componenten således at den ikke kan streames, dvs. det kan den godt, men når man læser den fra en stream, så antages det, at hele streamen består af image data, hvorfor hele streamen indlæses. Først når dette er sket, decodes dataene og JPG-imaget opbygges. Jeg vil mene at man kan kalde det en bug, at hele streamen indlæses, selvom image dataene kun fylder en brøkdel, og at stream pointeren ovenikøbet efterlades ved EOF istedet for at blive tilbage stillet til \'korrekt\' position, men så\'en er livet....
Så kan du vel bare kode et hack, der loader ind i en tmp stream som kun indeholder imagedata
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.