怎样将emf文件后台转化为bmp,不用显示
或者那位知道那有sample code或库,绝对有分
或者那位知道那有sample code或库,绝对有分
解决方案 »
- 请问如何在SDK写的程序里调用基于MFC的DLL呢?
- VC中复制位图到剪切板,粘贴到word!!!
- 用vc++编写的程序,经编译后成为可执行文件,但是他在另一台机器上运行时,出现如下错误信息:没有找到MFC42D.DLL
- 要写一个有统计图表的程序
- 请问如何在Button上面加载Icon或者Bitmap
- 请问什么安装软件好看好用?
- I am waiting
- 为什么我的程序调试运行正常,但是直接运行生成的执行文件就会出问题!
- 请教在mfc环境下如何把非PDF文件转成PDF
- 求教:我写了一程序,在调试运行的时候执行一删除功能可正常运行,但是直接运行就报错!
- 我要到上海去,给点建议.谢谢.
- 怎么禁止在CWebBrowser上点右键?
以下函数转换.wmf文件或者.emf文件为HBITMAP
支持.wmf、.emf、placeable .wmf三种类型的Windows Meta文件。
*/
HBITMAP ConvertMetaToBitmap(LPCTSTR filename)
{
HENHMETAFILE hemf;
int size, width, height;
BOOL isEmf, isPlaceable;
char *buffer;
CRect rect; if((filename == NULL) || (*filename == 0)){
return FALSE;
} if(GetMetaFileSize(filename, width, height, isEmf, isPlaceable))
{
rect.SetRect(0, 0, width, height);
if(isEmf){
//如果是扩展方式的emf文件
hemf = GetEnhMetaFile(filename);
}
else{
int offset;
offset = (isPlaceable) ? sizeof(PLACEABLE_METAHEADER) : 0;
if(!ReadWmfFile(filename, offset, size, buffer)){
return NULL;
}
/* size = GetMetaFileBitsEx(hmf, 0, NULL);
buffer = new char[size];
if(buffer == NULL){
DeleteMetaFile(hmf);
DeleteFile(tmpname);
return NULL;
}
GetMetaFileBitsEx(hmf, size, buffer); */
hemf = SetWinMetaFileBits(size, (BYTE *)buffer, NULL, NULL);
delete []buffer;
}
if(hemf == NULL){
return NULL;
}
HDC hdc = GetDC(NULL);
HDC mdc = CreateCompatibleDC(hdc);
HBITMAP mbmp = CreateCompatibleBitmap(hdc, width, height);
HBITMAP oldbmp = (HBITMAP)SelectObject(mdc, mbmp);
HBRUSH hbrush = CreateSolidBrush(RGB(255, 255, 255)); FillRect(mdc, &rect, hbrush);
DeleteObject(hbrush);
PlayEnhMetaFile(mdc, hemf, &rect);
DeleteEnhMetaFile(hemf); SelectObject(mdc, oldbmp);
DeleteDC (mdc);
ReleaseDC(NULL, hdc); return mbmp;
}
return NULL;
}