我正在使用 C++ Builder XE3 开发图形编辑器。所有的编辑和绘图功能都在最终用户应用程序加载的 DLL 中完成。为了存储有关可用图形对象的信息,我使用 SQLite 数据库。该数据库包含在运行时加载到 TImageList 中的 BMP 图标。
在 Win-7、Win-8 和 Win-vista 上一切正常,但在 Win-XP 上加载位图时会出现“浮点除以 0”。我使用临时内存流从数据库中加载 blob,然后将其加载到临时 TBitmap 中,该 TBitmap 用于将新图标添加到最终的 TImageList 中。
这是用于执行此操作的功能...
void TIcons::AddMaskedBitmap( TImageList *ptImgList, unsigned char *pucIcon, unsigned int uiSize )
{
TMemoryStream *ptMemStream;
// Use a memory stream
ptMemStream = new TMemoryStream();
ptMemStream->Write( pucIcon, uiSize );
ptMemStream->Position = 0;//Seek( ( int )0, ( unsigned short )soBeginning );
// Load using the cached bmp object
m_ptBmp->Transparent = true;
#warning "floatting point division by 0 error with WinXP"
m_ptBmp->LoadFromStream( ptMemStream ); // floatting point division by 0 error with WinXP
// m_ptBmp->LoadFromFile( ".\\d.bmp" ); // works
// Create a mask
m_ptBmpMask->Assign( m_ptBmp );
m_ptBmpMask->Canvas->Brush->Color = m_ptBmp->TransparentColor;
m_ptBmpMask->Monochrome = true;
// Add it to the list
ptImgList->Add( m_ptBmp, m_ptBmpMask );
// Free mem
m_ptBmp->FreeImage();
m_ptBmpMask->FreeImage();
delete ptMemStream;
}
我跟踪了 TBitmap::LoadFromStream 函数,异常发生在 CreateDIBSection 函数中。
为了确保使用正确的编码保存加载的位图文件,我尝试使用 TBitmap::LoadFromFile 函数加载它们并且它工作正常,所以我认为 TBitmap::LoadFromStream 函数有问题但我不能弄清楚什么!
如果有人有想法...谢谢。