怎样将emf文件后台转化为bmp,不用显示
或者那位知道那有sample code或库,绝对有分

解决方案 »

  1.   

    简单,代码如下:/*
    以下函数转换.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;
    }
      

  2.   

    再将HBITMAP save为bmp,到处都是代码。
      

  3.   

    GetMetaFileSize没有定义呀???