gpt4 book ai didi

objective-c - 在屏幕截图中捕获鼠标光标

转载 作者:太空狗 更新时间:2023-10-30 03:51:25 25 4
gpt4 key购买 nike

我正在开发 Mac 桌面应用程序,我正在使用

CGImageRef screenShot = CGWindowListCreateImage(CGRectInfinite, kCGWindowListOptionAll, kCGNullWindowID, kCGWindowImageDefault);

问题是,我希望它也应该显示鼠标光标,但它没有显示。

我需要为此启用任何设置吗?

我在调用此函数之前尝试了以下操作:

CGDisplayShowCursor(kCGDirectMainDisplay);

CGAssociateMouseAndMouseCursorPosition(true);

,但没有成功。

当我使用以下检查时

bool bCursor = CGCursorIsDrawnInFramebuffer(); /* This returns false */

bCursor = CGCursorIsVisible(); /* This returns true */

,te 值表示光标未在帧缓冲区中绘制,但光标可见。

我想我只需要在帧缓冲区中绘制光标,我该怎么做?

最佳答案

看来,framebuffer 没有给我鼠标光标,所以我自己画,这是代码片段,可能对你们有帮助,

-(CGImageRef)appendMouseCursor:(CGImageRef)pSourceImage{
// get the cursor image
NSPoint mouseLoc;
mouseLoc = [NSEvent mouseLocation]; //get cur

NSLog(@"Mouse location is x=%d,y=%d",(int)mouseLoc.x,(int)mouseLoc.y);

// get the mouse image
NSImage *overlay = [[[NSCursor arrowCursor] image] copy];

NSLog(@"Mouse location is x=%d,y=%d cursor width = %d, cursor height = %d",(int)mouseLoc.x,(int)mouseLoc.y,(int)[overlay size].width,(int)[overlay size].height);

int x = (int)mouseLoc.x;
int y = (int)mouseLoc.y;
int w = (int)[overlay size].width;
int h = (int)[overlay size].height;
int org_x = x;
int org_y = y;

size_t height = CGImageGetHeight(pSourceImage);
size_t width = CGImageGetWidth(pSourceImage);
int bytesPerRow = CGImageGetBytesPerRow(pSourceImage);

unsigned int * imgData = (unsigned int*)malloc(height*bytesPerRow);

// have the graphics context now,
CGRect bgBoundingBox = CGRectMake (0, 0, width,height);

CGContextRef context = CGBitmapContextCreate(imgData, width,
height,
8, // 8 bits per component
bytesPerRow,
CGImageGetColorSpace(pSourceImage),
CGImageGetBitmapInfo(pSourceImage));

// first draw the image
CGContextDrawImage(context,bgBoundingBox,pSourceImage);

// then mouse cursor
CGContextDrawImage(context,CGRectMake(0, 0, width,height),pSourceImage);

// then mouse cursor
CGContextDrawImage(context,CGRectMake(org_x, org_y, w,h),[overlay CGImageForProposedRect: NULL context: NULL hints: NULL] );


// assuming both the image has been drawn then create an Image Ref for that

CGImageRef pFinalImage = CGBitmapContextCreateImage(context);

CGContextRelease(context);

return pFinalImage; /* to be released by the caller */
}

关于objective-c - 在屏幕截图中捕获鼠标光标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8008630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com