2017-06-27 5 views
0

J'ai un problème où j'essaye de charger une image de Jpg dans Delphi.Delphi ne pas charger l'image Jpg - pense que c'est un bitmap?

Ma ligne d'appel de code est:

AImage.Picture.LoadFromFile(AImageFilePathStr); 

J'ai suivi ce que la méthode Vcl.Graphics TFileFormatsList.FindExt.

J'ai ajouté une montre (certaines variables comme 'I' étaient inaccessibles en raison de l'optimisation), mais FindExt correspond quand I = 8. 4ème élément correspond et «I» compte à rebours de 11 à 0.

Une montre sur TFileFormatType(Items[8]) se développe en GraphicClass is TBitmap and Extension is 'jpg'. Donc l'extension correspond, mais la classe GraphicClass est TBitmap.

Une exception est levée plus tard "L'image bitmap n'est pas valide". Pourquoi Delphi semble-t-il penser que cette image Jpg est une image bitmap?

Merci.

+0

La seule façon dont '.jpg' correspondrait à' TBitmap' serait si le code utilisateur en dehors de la VCL l'avait mal enregistré en utilisant 'TPicture.RegisterFileFormat()' incorrectement. Ajoutez l'unité 'Vcl.Imaging.Jpeg' standard à votre clause' uses' pour enregistrer correctement JPG. –

+0

Impossible de répondre à cette question en l'état. Vous avez besoin d'un [mcve] pour expliquer le comportement autrement inexplicable. Eh bien, je suppose qu'il est assez facile de supposer que le format a été mal enregistré par quelque chose mais la partie sans réponse est ce qu'est ce quelque chose. –

+0

Mes excuses. Je le ferai dans le futur. – DelphiGuy

Répondre

1

Ajout de Vcl.Imaging.Jpeg à la clause uses dans mon unité principale était la réponse.

Je ne comprends pas encore pourquoi, mais ça l'a corrigé. :-)

+0

Informations supplémentaires: – DelphiGuy

+0

Il n'y a aucun appel utilisateur à TPicture.RegisterFileFormat. En ajoutant le Jpeg à mes utilisations, le Vcl.Graphics TFileFormatsList.FindExt a augmenté son nombre à 14 classes enregistrées. Les derniers ajoutés ont la priorité et correspondent correctement à l'extension jpg à TJPEGImage. – DelphiGuy

+2

Cela n'explique pas pourquoi 'TBitmap' était à l'origine enregistré pour JPG. Les enregistrements de classe natifs de la VCL ne le font pas, il doit donc y avoir quelque chose d'autre dans votre projet qui l'a fait. –