Bonsoir,
Je rencontre un problème lorsque je cherche à charger un TJpegImage à partir d'un TStream.
exemple de code qui ne fonctionne pas :
Lors du "Image1.Picture.Assign(jpg);"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 procedure TForm1.Button1Click(Sender: TObject); var HandleDLL: THandle; getJpeg : function(NomImg : ShortString) : TJpegImage; stdcall; jpg : TJpegImage; begin getJpeg:= LierFonction(HandleDLL, 'getJpg'); if assigned(getJpeg) then begin jpg:= getJpeg('Clouds'); Image1.Picture.Assign(jpg); end; end;
Contexte du code : getJpeg est une fonction issue de ma dll. La dll prends le TJpegImage depuis un TCustomMemoryStream. Cela donne le même résultat si je charge directement depuis un TStream dans mon application.
y'a pas de try ou quoi que ce soit parce que je l'ai enlevé pour faire moins de lecture
exemple de code qui fonctionne :
On peut donc conclure que l'objet TJpegImage récupéré depuis ma dll est bon. Le fichier 'truc.jpg' résultant est bien une belle image jpg sur le disque et j'ai bien le jpeg qui s'affiche dans Image1.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 procedure TForm1.Button1Click(Sender: TObject); var HandleDLL: THandle; getJpeg : function(NomImg : ShortString) : TJpegImage; stdcall; jpg, jpg2 : TJpegImage; begin getJpeg:= LierFonction(HandleDLL, 'getJpg'); if assigned(getJpeg) then begin jpg:= getJpeg('Clouds'); jpg.SaveToFile('truc.jpg'); jpg2:= TJpegImage.Create; jpg2.LoadFromFile('truc.jpg'); Image1.Picture.Assign(jpg2); end; end;
C'est avec l'instance de jpg apparemment car même en faisant ça - même code qu'au-dessus mais avec le même TJPEGImage au lieu d'une nouvelle instance. -
L'erreur revient. Mais pourquoi donc ? Alors là...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 [...]if assigned.... jpg:= getJpeg('Clouds'); jpg.SaveToFile('truc.jpg'); jpg.CleanUpInstance; jpg.LoadFromFile('truc.jpg'); Image1.Picture.Assign(jpg); end;[...]
J'aimerai tout de même éviter de passer par l'extraction du fichier tout de même, c'est pas top
Y'a-t-il des amateurs, des connaisseurs ou des idées dans la salle ?
Partager