Delphi OleGraphic.LoadFromStream()引发OLE错误800A01E1

Delphi OleGraphic.LoadFromStream()引发OLE错误800A01E1,delphi,delphi-xe5,Delphi,Delphi Xe5,我必须将jpeg文件加载到OleGrafic中。调用OleGraphic.LoadFromStream()时,会引发OLE错误800A01E1 我试图找出这个错误,但没有成功。 与ole错误相关的最接近的答案是,但我在那里找不到800A01E1 我还尝试在主窗体中初始化Ole。与生成此错误的表单相同。没有任何成功 initialization OleInitialize(nil); finalization oleuninitialize; @Remy Lebeau:此代码适用于其他项

我必须将jpeg文件加载到OleGrafic中。调用OleGraphic.LoadFromStream()时,会引发OLE错误800A01E1

我试图找出这个错误,但没有成功。 与ole错误相关的最接近的答案是,但我在那里找不到800A01E1

我还尝试在主窗体中初始化Ole。与生成此错误的表单相同。没有任何成功

initialization
  OleInitialize(nil);
finalization
  oleuninitialize;
@Remy Lebeau:此代码适用于其他项目:

sFileName := OPD.FileName; 
      OleGraphic := TOleGraphic.Create; 
      fs := TFileStream.Create(sFileName, fmOpenRead Or fmSharedenyNone);
     // fs.Seek(0,soFromBeginning);// := 0;  Here I  tried to make sure it's o.
      OleGraphic.LoadFromStream(fs);
      Source := TImage.Create(Nil);
      Source.Picture.Assign(OleGraphic);
      SrcBild := TBitmap.Create; 
      SrcBild.Width := Source.Picture.Width;
      SrcBild.Height := Source.Picture.Height;
      SrcBild.Canvas.Draw(0, 0, Source.Picture.Graphic);
      DstBild := TBitmap.Create;
      DstBild.Width := 200;
      DstBild.Height := 100;
      SmoothResize(SrcBild, DstBild);

SmoothResize来自

我无法告诉您该图像无法加载的原因,但我可以告诉您该错误代码的名称,以及将来如何查找此类代码

Windows中的8位十六进制异常/hresult错误代码通常可以通过在它们前面加
0x
来找到,在这种情况下给出
0x800A01E1

一个简单的搜索告诉我错误代码的名称是CTL_E_INVALIDPICTURE,并且该结果也列在基础Win32函数上:

当然,这也不会告诉你哪里出了问题,但至少你现在知道可能的来源是文件的实际内容


由于函数的文档也列出了有效的文件格式,我的猜测是首先确保文件是这些格式之一,而不仅仅是伪装成JPEG或错误文件名下的其他图像文件(或随机数据),然后尝试将该文件加载到其他程序中。也许您甚至可以将文件加载并保存到某个工具中,该工具可以重写图像文件的内容,并可能会修复它。

我无法告诉您该图像无法加载的原因,但我可以告诉您该错误代码的名称,以及将来如何查找此类代码

Windows中的8位十六进制异常/hresult错误代码通常可以通过在它们前面加
0x
来找到,在这种情况下给出
0x800A01E1

一个简单的搜索告诉我错误代码的名称是CTL_E_INVALIDPICTURE,并且该结果也列在基础Win32函数上:

当然,这也不会告诉你哪里出了问题,但至少你现在知道可能的来源是文件的实际内容


由于函数的文档也列出了有效的文件格式,我的猜测是首先确保文件是这些格式之一,而不仅仅是伪装成JPEG或错误文件名下的其他图像文件(或随机数据),然后尝试将该文件加载到其他程序中。也许您甚至可以将文件加载并保存到某个工具中,该工具可以重写图像文件的内容,并可能会修复它。

我无法告诉您该图像无法加载的原因,但我可以告诉您该错误代码的名称,以及将来如何查找此类代码

Windows中的8位十六进制异常/hresult错误代码通常可以通过在它们前面加
0x
来找到,在这种情况下给出
0x800A01E1

一个简单的搜索告诉我错误代码的名称是CTL_E_INVALIDPICTURE,并且该结果也列在基础Win32函数上:

当然,这也不会告诉你哪里出了问题,但至少你现在知道可能的来源是文件的实际内容


由于函数的文档也列出了有效的文件格式,我的猜测是首先确保文件是这些格式之一,而不仅仅是伪装成JPEG或错误文件名下的其他图像文件(或随机数据),然后尝试将该文件加载到其他程序中。也许您甚至可以将文件加载并保存到某个工具中,该工具可以重写图像文件的内容,并可能会修复它。

我无法告诉您该图像无法加载的原因,但我可以告诉您该错误代码的名称,以及将来如何查找此类代码

Windows中的8位十六进制异常/hresult错误代码通常可以通过在它们前面加
0x
来找到,在这种情况下给出
0x800A01E1

一个简单的搜索告诉我错误代码的名称是CTL_E_INVALIDPICTURE,并且该结果也列在基础Win32函数上:

当然,这也不会告诉你哪里出了问题,但至少你现在知道可能的来源是文件的实际内容


由于函数的文档也列出了有效的文件格式,我的猜测是首先确保文件是这些格式之一,而不仅仅是伪装成JPEG或错误文件名下的其他图像文件(或随机数据),然后尝试将该文件加载到其他程序中。也许您甚至可以将文件加载并保存到某个工具中,该工具可以重写图像文件的内容,可能会修复它。

TOleGraphic.LoadFromStream()
在内部使用。根据其文件:

流必须为BMP(位图)、WMF(图元文件)或ICO(图标)格式


换句话说,JPG不受支持。

TOleGraphic.LoadFromStream()
在内部使用。根据其文件:

流必须为BMP(位图)、WMF(图元文件)或ICO(图标)格式


换句话说,JPG不受支持。

TOleGraphic.LoadFromStream()
在内部使用。根据其文件:

流必须为BMP(位图)、WMF(图元文件)或ICO(图标)格式


换句话说,JPG不受支持。

TOleGraphic.LoadFromStream()
在内部使用。根据其文件:

流必须为BMP(位图)、WMF(图元文件)或ICO(图标)格式


换句话说,JPG是不受支持的。

在为Windows搜索这样的8位十六进制错误代码时,只需在前面加前缀
0x
,然后进行搜索,结果是:-CTL_E_INVALIDPICTUREYes。也就是说,无效图片。谢谢你的邀请
Return value

This method returns standard COM error codes in addition to the following values.
Return code           Description
S_OK                  The method completed successfully.
CTL_E_INVALIDPICTURE  Invalid picture file.