iumike 发表于 2010-3-28 17:20:16

从odDbGetPreviewBitmap()中检索HBitmap

您好!
我已经尝试了以下代码,但我一直得到一个黑色位图
OdThumbnailImage odImage;
OdStreamBufPtr pFile=odrxSystemServices()->createFile("c:\\Temp\\test.dwg", Oda::kFileRead, Oda::kShareDenyNo, Oda::kOpenExtive);
try
{
odDbGetPreviewBitmap(pFile,&odImage);
}
返回TRUE;
}
bool b=odImage.hasBmp();
if(b)
{
BITMAPINFO*pInfo;
pInfo=(BITMAPINFO*)(odImage.bmp.begin () );
if(! pInfo)
返回TRUE;
val*pBuffer;
=NULL)
{
...
}
}
有什么想法吗?
迈克
**** Hidden Message *****

iumike 发表于 2010-3-31 11:17:46

我已要求Bricsys支持部门帮助我解决这个问题,我遇到的一个特殊错误是odDbGetPreviewBitmap()返回的类型是BITMAPINFO Header,而不是BITMAPINFO
因此,为了解决这个问题,我必须从BITMAPINFO头变量中提取HBITMAP。
我研究了MSDN文档,发现BITMAPINFO尾变量必须转换为BITMAPINFO,并且在
使用CreateDIBSection(…)
后,根据相同的MSDN,我知道BITMAPINFO是一个包含初始BITMAPINFO头部的结构,我的问题是,我不明白如何将额外的RGBQUAD bmiColors表示为下面的声明:
类型定义结构tagBITMAPINFO{
BITMAPINFO标头bmiHeader;
RGBQUAC BMIcolor;
}BITMAPINFO<说实话,我不明白为什么ODA不提供类似ARX-acdbGetPreviewBitmapFromDwg()的简单函数<迈克

LE3 发表于 2010-3-31 11:30:43

我记得很久以前使用 cadwerx.net 的一个公共课程:AcadThumb
手头没有我的旧代码,但是如果我找到一些东西,会尝试发布。

iumike 发表于 2010-3-31 14:04:10

我只是简单地尝试将BITMAPINFO头转换为BITMAPINFO,但我所得到的只是一个空白图像(因此我认为这种方法是错误的)
,根据MSDN,这会更加混乱http://msdn.microsoft.com/en-us/library/dd318229%28VS.85%29.aspx
如果将BITMAPINFO标头强制转换为BITMAPINFO,则bmiHeader成员将引用BITMAPINFO Header,bmiColors成员将引用颜色表中的第一个条目或第一个颜色掩码
请注意,如果位图使用颜色表或颜色掩码,则整个格式结构(BITMAPINFO标头加上颜色信息)的大小不等于sizeof(BITMAPINFOHEADER)或sizeof(BITMAPINFO)。您必须计算每个实例的实际大小。…
Ioan

LE3 发表于 2010-3-31 15:35:17

寻找CAdwerx.net的cAcadThumb…该课程将帮助您<对不起,在这里找不到我的代码示例。<br>

LE3 发表于 2010-4-1 13:44:32

有机会玩一下这个.bmp提取器,但不知道它会特定于您的用途:
http://www.theswamp.org/index.php?topic=32857.new

iumike 发表于 2010-4-2 04:21:57

非常感谢!!!!
我会玩你的代码来适应我需要的!!
亲切的问候!
迈克
页: [1]
查看完整版本: 从odDbGetPreviewBitmap()中检索HBitmap