我必须将jpeg文件加载到OleGrafic中。当我调用OleGraphic.LoadFromStream()时,它会引发OLE错误800A01E1。
我试图找出这个错误,但没有成功。与ole错误相关的最接近的答案是所有OLE错误代码列表,但我在那里找不到800A01E1。
我还试图以主形式初始化Ole。生成此错误的相同形式。百无所成。
initialization
OleInitialize(nil);
finalization
oleuninitialize;
@ Remy :该代码在其他项目中正常工作:
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
发布于 2014-07-25 15:18:28
我不能告诉您为什么该映像无法加载,但我可以告诉您错误代码的名称,以及如何在将来找到这样的代码。
Windows中的8位十六进制异常/结果错误代码通常可以通过在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或不正确的文件名,然后尝试将该文件加载到其他程序中。也许您甚至可以在某个可以重写图像文件内容的工具中加载和保存该文件,可能会修复它。
发布于 2014-07-25 16:50:29
TOleGraphic.LoadFromStream()
在内部使用OleLoadPicture()
。根据其文件:
流必须以BMP (位图)、WMF (图元文件)或ICO (图标)格式。
换句话说,不支持JPG。
https://stackoverflow.com/questions/24958419
复制相似问题