Только значок Grabbing показывает черный цвет при сохранении в Visual C ++ - PullRequest
0 голосов
/ 10 декабря 2018

Я хочу сохранить иконку в файл в VC ++.Пожалуйста, найдите код ниже, который я использую.Я мог бы сохранить все иконки, которые были успешно сохранены.Но когда я пытаюсь сохранить значок захвата на локальный жесткий диск, вокруг изображения появляется черный фон.

Найдите приведенный ниже фрагмент кода.

введите код здесь

 CURSORINFO ci;
    ci.cbSize = sizeof(ci);
    GetCursorInfo(&ci);
    HICON hico = ci.hCursor;
    ICONINFO iconInfo;
    GetIconInfo(ci.hCursor, &iconInfo);

    BYTE  buf[4096];
    LONG cbSize = 0;

    PICTDESC pd = {sizeof(pd), PICTYPE_ICON};
    pd.icon.hicon = ci.hCursor;
    CComPtr<IPicture> pPict = NULL;
    CComPtr<IStream>  pStrm = NULL;
    BOOL res = FALSE;
    res = SUCCEEDED( ::CreateStreamOnHGlobal(NULL, TRUE, &pStrm) );
    res = SUCCEEDED( ::OleCreatePictureIndirect(&pd, IID_IPicture, FALSE, (void**)&pPict) );
    res = SUCCEEDED( pPict->SaveAsFile( pStrm, TRUE, &cbSize ) );

    if( res )
    {
              // rewind stream to the beginning
               LARGE_INTEGER li = {0};
               pStrm->Seek(li, STREAM_SEEK_SET, NULL);
             // write to file
             HANDLE hFile = ::CreateFile("E:\\abc.jpeg", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);
               if( INVALID_HANDLE_VALUE != hFile )
                  {
                   DWORD dwWritten = 0, dwRead = 0, dwDone = 0;
                          while( dwDone < cbSize )
                                  {
                                   if( SUCCEEDED(pStrm->Read(buf, sizeof(buf), &dwRead)) )
                                        {
                                           ::WriteFile(hFile, buf, dwRead, &dwWritten, NULL);
                                             if( dwWritten != dwRead )
                                                     break;
                                                   dwDone += dwRead;
                                          }
                                         else
                                            break;
                     }
                            _ASSERTE(dwDone == cbSize);
                          ::CloseHandle(hFile);
            }

    }

Пожалуйста, найдите ниже значок захвата. введите описание изображения здесь

Это происходит только для ICON руки в gmail.Пожалуйста, найдите изображение ниже. введите описание изображения здесь

Спасибо за вашу помощь заранее.

...