首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TBitmap->LoadFromStream在Win XP中失败

TBitmap->LoadFromStream在Win XP中失败
EN

Stack Overflow用户
提问于 2013-08-26 09:25:57
回答 3查看 927关注 0票数 0

我正在使用C++ Builder XE3开发一个图形编辑器。所有编辑和绘图功能都是在最终用户应用程序加载的DLL中完成的。为了存储有关可用图形对象的信息,我使用SQLite数据库。该数据库包含BMP图标,在运行时加载到TImageList中.

Win-7,Win-8和Win-vista一切都很好,但是对于Win-XP,在加载位图时会出现“浮点除法”。我使用一个临时内存流从数据库加载blob,然后将其加载到一个临时TBitmap中,用于将新图标添加到最终的TImageList中。

这是用来这样做的函数..。

代码语言:javascript
复制
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函数有问题,但是我不知道是什么!

如果有人有主意..。谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-26 09:29:06

LoadFromFile是通过创建文件流并将其传递给LoadFromStream来实现的。这样,如果内存流的内容与文件的内容相同,那么对LoadFromStream的调用就会成功。

因此,唯一明智的结论是,内存流的内容在某种程度上是无效的。

票数 0
EN

Stack Overflow用户

发布于 2013-08-26 10:11:32

存储到数据库中的位图使用BITMAPV4HEADER结构进行编码,这应该是Win95 95/NT4所支持的,但是有问题。

如果我使用BITMAPINFOHEADER结构对位图进行编码,它工作得很好,BITMAPINFOHEADER结构是位图编码的旧版本,它不包含颜色空间信息。

票数 0
EN

Stack Overflow用户

发布于 2013-12-16 12:47:36

我刚找到了一个对我有用的解决方案。

我的问题是,在Win7上开发的软件,当运行在XP上时,在加载我的一个BMP时,会以0的错误抛出除法。

结果发现,有问题的BMP是使用Win7油漆保存的(其他BMPs可以从Gimp中保存)。

为了修复它,我所需要做的就是在XP油漆上打开这个BMP并将它保存在那里。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18440861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档