Delphi没有加载Jpg图像-认为它是位图?

Delphi没有加载Jpg图像-认为它是位图?,delphi,bitmap,jpeg,Delphi,Bitmap,Jpeg,我有一个问题,我试图加载在Delphi中的Jpg图像 我的主叫代码是: AImage.Picture.LoadFromFile( AImageFilePathStr ); 不过,我还是遵循了Vcl.Graphics TFileFormatsList.FindExt方法 在这里,我添加了一个手表。由于优化,一些变量如“I”无法访问,但FindExt在I=8时匹配。第四项匹配,“I”从11倒计时到0 TFileFormatTypeItems[8]上的监视扩展为GraphicClass为TBitma

我有一个问题,我试图加载在Delphi中的Jpg图像

我的主叫代码是:

AImage.Picture.LoadFromFile( AImageFilePathStr );
不过,我还是遵循了Vcl.Graphics TFileFormatsList.FindExt方法

在这里,我添加了一个手表。由于优化,一些变量如“I”无法访问,但FindExt在I=8时匹配。第四项匹配,“I”从11倒计时到0

TFileFormatTypeItems[8]上的监视扩展为GraphicClass为TBitmap,扩展名为“jpg”。因此扩展匹配,但Graphics类是TBitmap

稍后会引发异常。位图图像无效

为什么Delphi似乎认为这个Jpg图像是位图

谢谢。

将Vcl.Imaging.Jpeg添加到我的主单元的uses子句中就是答案


我还不明白为什么,但这就解决了问题-

jpg映射到TBitmap的唯一方法是如果VCL之外的用户代码使用TPicture.RegisterFileFormat错误地注册了它。将标准Vcl.Imaging.Jpeg单元添加到uses子句以正确注册JPG。无法按原样回答此问题。你需要一个专家来解释这种莫名其妙的行为。好吧,我想很容易假设格式被某个东西注册错了,但无法回答的部分就是那个东西。我道歉。其他信息:没有用户调用TPicture.RegisterFileFormat。通过将Jpeg添加到我的使用中,Vcl.Graphics TFileFormatsList.FindExt将其计数增加到14个注册类。添加的最新版本优先并正确匹配扩展名jpg和TJPEGImage。这并不能解释为什么TBitmap最初注册为jpg。VCL的本机类注册没有做到这一点,因此必须是您的项目中的其他内容完成了注册。VCL的本机类注册实际上在TFileFormatsList的构造函数中错误注册了类。默认情况下,Png、gif、jpeg和jpg扩展都注册为类型TBitmap。添加带有扩展名的后续注册将取代VCL的早期注册。由于位图图像无效,我已将此文件发送给QualityCentral。应将其替换为VCL中已存在的通用未知图片文件扩展名。{$IF DEFINEDCLR}中的任何代码都是针对Delphi.NET的,它在多年前消失,但仍存在于源代码中。在Win32中,TFileFormatsList构造函数仅为bmp文件注册TBitmap。在.NET中,它为多种格式注册TBitmap,因为TBitmap使用.NET的类来支持各种格式并提取它们的像素数据。在Win32中并非如此,除了WIC之外,每种格式都是一个单独的类