2017-06-27 11 views
0

私は、DelphiでJpgイメージをロードしようとしているところに問題があります。コードのDelphiが読み込んでいないJpgイメージ - それはビットマップだと思いますか?

私の呼び出し元の行は次のとおりです。

AImage.Picture.LoadFromFile(AImageFilePathStr); 

私はVcl.Graphics TFileFormatsList.FindExt方法にかかわらず、それを追ってきました。

私は腕時計を追加しましたが(最適化のために '私'のような変数にはアクセスできませんでしたが)、FindExtはI = 8のときに一致します。 4番目の項目が一致し、「I」が11から0にカウントダウンします。

時計がTFileFormatType(Items[8])の場合はGraphicClass is TBitmap and Extension is 'jpg'になります。したがって、拡張は一致しますが、GraphicClassはTBitmapです。

「ビットマップイメージが無効です」という例外が後でスローされます。

なぜこのJpgイメージはビットマップだと思うようですか?

ありがとうございました。

+0

'.jpg'が' TBitmap'にマップする唯一の方法は、VCL以外のユーザコードが 'TPicture.RegisterFileFormat()'を使って間違って登録した場合です。標準の 'Vcl.Imaging.Jpeg'ユニットを' uses'節に追加してJPGを正しく登録してください。 –

+0

この質問にはそのまま回答することはできません。そうでなければ不可解な行動を説明するには、[mcve]が必要です。まあ、フォーマットが何かによって誤って登録されていると推測するのは簡単だと思いますが、答えられない部分は何かがあることです。 –

+0

謝罪します。将来私はそうするでしょう。 – DelphiGuy

答えて

1

私のメインユニットのuses句にVcl.Imaging.Jpegを追加することが答えでした。

私はまだその理由を理解していませんが、それを修正しました。 :-)

+0

追加情報: – DelphiGuy

+0

TPicture.RegisterFileFormatに対するユーザーコールはありません。私の用途にJpegを追加することで、Vcl.GraphicsのTFileFormatsList.FindExtはCountを14の登録済みクラスに上げました。最新のものが優先され、拡張子jpgがTJPEGImageに正しくマッチします。 – DelphiGuy

+2

これは、 'TBitmap'がもともとJPGに登録された理由を説明していません。 VCLのネイティブクラス登録はそれを行わないため、プロジェクト内でそれ以外のものでなければなりませんでした。 –

関連する問題