Я хочу сохранить иконку в файл в 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.Пожалуйста, найдите изображение ниже. введите описание изображения здесь
Спасибо за вашу помощь заранее.