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

时间:2014-07-25 14:46:18

标签: delphi delphi-xe5

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

我试图找出这个错误,没有任何成功。 与ole错误相关的最近答案是List of all OLE error codes,但我找不到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来自http://www.swissdelphicenter.com/torry/showcode.php?id=1896

2 个答案:

答案 0 :(得分:2)

我无法告诉您为什么该图片无法加载,但我可以告诉您该错误代码的名称,以及如何在将来找到此类代码。

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

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

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.

当然,这并没有告诉你什么是错的,但至少你现在知道可能的来源是文件的实际内容。

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

答案 1 :(得分:1)

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

  

流必须采用BMP(位图),WMF(图元文件)或ICO(图标)格式。

换句话说,不支持JPG。