Ну, у меня есть вопрос о прозрачности в растровом файле, который я хочу сохранить в виде png-файла, на данный момент я делаю снимок курсора в системе и сохраняю его как png, это отлично работает со стрелкой, рукой идругие курсоры, но в момент использования курсоров, таких как I-beam или «not» курсор, возникает проблема, объяснение состоит в том, что каждый курсор имеет маску и цветное растровое изображение, которые комбинируются и приводят к прозрачному курсору, но I-beam и другиене имеют цветного растрового изображения, у них есть только маска, содержащая цвет и маску в одном растровом изображении, я ссылаюсь на этот пост: C # - захват изображения курсора мыши хорошо, они используют C #, но идея та же.
в моем коде я использую C ++ и мне удается создать курсор, но с белым фоновым цветом, я не знаю, как преобразовать его в прозрачный цвет, в сообщении, которое я имею в виду, использовать функцию MakeTransparent, вы понимаете?спасибо за помощь: D
CURSORINFO cursor;
ICONINFO cursorIconInfo;
HICON cursorIcon;
cursor.cbSize=sizeof(CURSORINFO);
GetCursorInfo(&cursor);
GetIconInfo(cursor.hCursor,&cursorIconInfo);
//cursorIcon=CopyIcon(cursor.hCursor);
//GetIconInfo(LoadCursor(NULL,IDC_ARROW),&cursorIconInfo);
//cursorIcon=CreateIconIndirect(&cursorIconInfo);
CxImage* imag=new CxImage();
/*imag->CreateFromHICON(cursorIcon);
imag->Save("cursor.png",CXIMAGE_FORMAT_PNG);*/
BITMAP bm;
//CImage* imag=new CImage();
GetObject(cursorIconInfo.hbmMask,sizeof(BITMAP),&bm);
if(bm.bmHeight == bm.bmWidth*2){
HDC screendc=CreateDC(_T("DISPLAY"), NULL, NULL, NULL);
HDC cursormaskDC=CreateCompatibleDC(screendc);
HDC cursorfinalDC=CreateCompatibleDC(screendc);
HBITMAP cursormask=CreateCompatibleBitmap(screendc,bm.bmWidth,bm.bmWidth);
HBITMAP cursorfinal=CreateCompatibleBitmap(screendc,bm.bmWidth,bm.bmWidth);
SelectObject(cursormaskDC,cursorIconInfo.hbmMask);
SelectObject(cursorfinalDC,cursorfinal);
BitBlt(cursorfinalDC,0,0,bm.bmWidth,bm.bmWidth,cursormaskDC,0,bm.bmWidth,SRCCOPY);
BitBlt(cursorfinalDC,0,0,bm.bmWidth,bm.bmWidth,cursormaskDC,0,0,SRCINVERT);
/*cursorIconInfo.hbmColor=cursorcolor;
cursorIconInfo.hbmMask=cursormask;
cursorIcon=CreateIconIndirect(&cursorIconInfo);
imag->CreateFromHICON(cursorIcon);
imag->Save("cursorPrub.png",CXIMAGE_FORMAT_PNG);*/
imag->CreateFromHBITMAP(cursorfinal);
imag->Save("cursor.png",CXIMAGE_FORMAT_PNG);
DeleteObject(cursorIconInfo.hbmMask);
DeleteObject(cursorIconInfo.hbmColor);
DestroyIcon(cursorIcon);
imag->Destroy();
return;
}