2017-06-27 7 views
0

Ich habe ein Problem, wo ich versuche, ein JPG-Bild in Delphi zu laden.Delphi lädt kein JPG-Bild - Ist es ein Bitmap?

Meine Berufung Codezeile ist:

AImage.Picture.LoadFromFile(AImageFilePathStr); 

ich es aber auf die Vcl.Graphics TFileFormatsList.FindExt Verfahren befolgt haben.

Dort habe ich eine Uhr hinzugefügt (einige Variablen wie 'Ich' waren aufgrund der Optimierung nicht zugänglich), aber FindExt stimmt überein, wenn I = 8. 4. Item passt und 'I' zählt von 11 bis 0 herunter.

Eine Uhr auf TFileFormatType(Items[8]) erweitert sich auf GraphicClass is TBitmap and Extension is 'jpg'. Die Erweiterung passt also, aber die GraphicClass ist TBitmap.

Eine Ausnahme wird später ausgelöst "Bitmap-Bild ist nicht gültig".

Warum scheint Delphi dieses Jpg-Bild als Bitmap zu betrachten?

Danke.

+0

Die einzige Möglichkeit '.jpg' zu' TBitmap' zuzuordnen ist, wenn Benutzercode außerhalb der VCL ihn 'TPicture.RegisterFileFormat()' falsch registriert hat. Fügen Sie der 'uses'-Klausel die Standardeinheit' Vcl.Imaging.Jpeg' hinzu, um JPG korrekt zu registrieren. –

+0

Diese Frage kann nicht so beantwortet werden wie es ist. Du brauchst ein [mcve], um das ansonsten unerklärliche Verhalten zu erklären. Nun, ich nehme an, es ist leicht genug anzunehmen, dass das Format von etwas falsch registriert wurde, aber der nicht zu beantwortende Teil ist, was das ist. –

+0

Entschuldigung. Ich werde es in Zukunft tun. – DelphiGuy

Antwort

1

Hinzufügen Vcl.Imaging.Jpeg zu der uses Klausel in meiner Haupteinheit war die Antwort.

Ich verstehe das Warum noch nicht, aber das hat es behoben. :-)

+0

Zusätzliche Informationen: – DelphiGuy

+0

Es gibt keine Benutzeraufrufe an TPicture.RegisterFileFormat. Durch Hinzufügen des Jpeg zu meinen Verwendungen erhöhte Vcl.Graphics TFileFormatsList.FindExt seinen Count auf 14 registrierte Klassen. Die zuletzt hinzugefügten haben Vorrang und passen die Erweiterung jpg an TJPEGImage an. – DelphiGuy

+2

Das erklärt nicht, warum TBitmap ursprünglich für JPG registriert wurde. Die nativen Klassenregistrierungen der VCL tun das nicht, also musste es etwas anderes in Ihrem Projekt sein, das es getan hat. –