Как я могу сохранить растровое изображение в виде png в vc ++ без использования CImage - PullRequest
0 голосов
/ 26 июля 2011

Я новичок в vc ++. Я пытаюсь преобразовать HTML-файл в изображение и сохранить его как PNG, в VC ++. Теперь я преобразовал HTML в растровое изображение и сохранить с помощью функции сохранения CImage. Я хочу запустить это приложение в Windows 2008. Он работает правильно, когда приложение запускается вручную. Мне нужно запустить его через задачу расписания. Но когда приложение запускается через задачу расписания, изображение не создается.

Как мне преодолеть эту проблему?

Это мой код

BOOL CCreateHtml::CreateImage(IHTMLDocument2 *pDoc,LPCTSTR szDestFilename,CSize srcSize){
IHTMLDocument3* pDocument3 = NULL;
IHTMLDocument2* pDocument  = NULL;
IHTMLElement2* pElement2   = NULL;
IHTMLElement* pElement     = NULL;
IViewObject2* pViewObject  = NULL;
IDispatch* pDispatch       = NULL;
IViewObject* pViewObj = NULL;

HRESULT hr;

long bodyHeight;
long bodyWidth;
long rootHeight;
long rootWidth;
long height;
long width;
CImage img;
    if(FAILED(m_pBrowser->get_Document(&pDispatch)))
    return FALSE;
if(FAILED(pDispatch->QueryInterface(IID_IHTMLDocument2,(void**)&pDocument)))
    return FALSE;
if(FAILED(pDocument->get_body(&pElement)))
    return FALSE;
if(FAILED(pElement->QueryInterface(IID_IHTMLElement2,(void**)&pElement2)))
    return FALSE;
if(FAILED(pElement2->get_scrollHeight(&bodyHeight)))
    return FALSE;
if(FAILED(pElement2->get_scrollWidth(&bodyWidth)))
    return FALSE;
if(FAILED(pDispatch->QueryInterface(IID_IHTMLDocument3,(void**)&pDocument3)))
    return FALSE;
if(FAILED(pDocument3->get_documentElement(&pElement)))
    return FALSE;
if(FAILED(pElement->QueryInterface(IID_IHTMLElement2,(void**)&pElement2)))
    return FALSE;
if(FAILED(pElement2->get_scrollHeight(&rootHeight)))
    return FALSE;   
if(FAILED(pElement2->get_scrollWidth(&rootWidth)))
    return FALSE;

HBITMAP m_hBmp;
width = bodyWidth;
height = rootHeight > bodyHeight ? rootHeight : bodyHeight;

if(width > 2000)
    width = 2000;
if(height > 2000)
    height = 2000;

MoveWindow(0,0,width,height,TRUE);
::MoveWindow(m_hwndWebBrowser,0,0,width,height,TRUE);

if(FAILED(m_pBrowser->QueryInterface(IID_IViewObject2,(void**)&pViewObject)))
    return FALSE;

CDC *cdcMain = GetDC();
HDC hdcMain = *cdcMain;
HDC hdcMem = CreateCompatibleDC(hdcMain);
m_hBmp = CreateCompatibleBitmap(hdcMain,width,height);
SelectObject(hdcMem,m_hBmp);

RECTL rcBounds = { 0, 0, width, height };

hr = pViewObject->Draw(DVASPECT_CONTENT, -1, NULL, NULL,hdcMain,hdcMem, &rcBounds, NULL, NULL, 0);

img.Attach(m_hBmp);
if(!hr ==img.Save(szDestFilename))
    return FALSE;
img.Detach();
img.Destroy();

pViewObject->Release();
return TRUE;

}

1 Ответ

1 голос
/ 26 июля 2011

Вам не понравится ответ, но встроенной поддержки изображений PNG нет, вам нужно использовать внешнюю библиотеку, например pnglib

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...