我必须加载一个jpeg文件到OleGrafic。当我调用OleGraphic.LoadFromStream()时,它会抛出OLE Error 800A01E1.
我试图识别这个错误,但没有成功。与ole错误相关的最接近的答案是所有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来自http://www.swissdelphicenter.com/torry/showcode.php?id=1896
我不能告诉你为什么这个图像无法加载,但是我可以告诉你这个错误代码的名字,以及如何在将来找到这样的代码。
Windows中的8位十六进制exception/hresult错误码通常可以通过前缀0x
来查找,在这种情况下给出0x800A01E1
。
一个简单的搜索告诉我,该错误代码的名称是ctle_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或在不正确的文件名下的东西,然后尝试将该文件加载到其他一些程序中。也许你甚至可以加载并保存文件在一些工具,可以重写图像文件的内容,可能会修复它。
TOleGraphic.LoadFromStream()
内部使用OleLoadPicture()
。根据它的文档:
流必须为BMP(位图)、WMF(元文件)或ICO(图标)格式。
即不支持JPG格式