Сохранение битмапа - еще короче !!!
От: Hollander Беларусь http://blogs.rsdn.org/ikemefula
Дата: 29.11.01 19:09
Оценка: 13 (4)
Привет !

Откопал случайно в заголовочном файле функцию. В MSDN у меня недокументировано ничего — апрельский этого года. А заголовочный файл от 4.24.98 !!!

Эта функция может, по идее, сохранять все то, что загружает OleLoadPicture — BMP, GIF, JPEG, ICO, WMF, и EMF



WINOLECTLAPI OleSavePictureFile(LPDISPATCH lpdispPicture,
    BSTR bstrFileName);


итак :


BOOL SaveBitmap(HBITMAP hBitmap,HPALETTE hPal,LPCTSTR szPath)
{
    PICTDESC pDesc;
    
    pDesc.cbSizeofstruct = sizeof(PICTDESC);
    pDesc.bmp.hbitmap = hBitmap;
    pDesc.bmp.hpal = hPal;
    pDesc.picType =  PICTYPE_BITMAP;

    return SavePictureIndirect(pDesc,szPath);
}

BOOL SavePictureIndirect(PICTDESC pDesc,LPCTSTR szPath)
{
    IPicture* pPicture = NULL;
    BOOL bResult = TRUE;

    OleCreatePictureIndirect(&pDesc,&IID_IPicture,FALSE,(void**)&pPicture);
    if(pPicture == NULL)
        bResult = FALSE;
    else
        bResult = SavePicture(pPicture,szPath);
    if(pPicture != NULL)
        pPicture->lpVtbl->Release(pPicture);
    return bResult;
}


BOOL SavePicture(IPicture* pPicture,LPCTSTR szPath)
{
    HRESULT hr;
    int size = strlen(szPath);
    BSTR bstrPath = SysAllocStringByteLen(szPath,size*2);

    MultiByteToWideChar(CP_ACP,0,szPath,size, bstrPath, size*2);


    hr = OleSavePictureFile((LPDISPATCH)pPicture,bstrPath);

    SysFreeString(bstrPath);

    return SUCCEEDED(hr);
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.