从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 ***** 我已要求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()的简单函数<迈克 我记得很久以前使用 cadwerx.net 的一个公共课程:AcadThumb
手头没有我的旧代码,但是如果我找到一些东西,会尝试发布。 我只是简单地尝试将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 寻找CAdwerx.net的cAcadThumb…该课程将帮助您<对不起,在这里找不到我的代码示例。<br> 有机会玩一下这个.bmp提取器,但不知道它会特定于您的用途:
http://www.theswamp.org/index.php?topic=32857.new 非常感谢!!!!
我会玩你的代码来适应我需要的!!
亲切的问候!
迈克
页:
[1]