Ami*_*k12 2 cocoa objective-c cursor nsevent cursor-position
我需要捕获帧缓冲并将其保存到文件中,
我使用抓取示例代码的儿子捕获缓冲区,但它没有给我鼠标指针,
所以我正在绘制我自己的鼠标指针,请参考下面的代码片段,一切正常,除非光标未在适当的位置绘制,x和y坐标略有偏差,形成Cocoa框架,我得到了鼠标指针的位置,似乎不知何故,我应该得到鼠标光标边界,所以相同的矩形我可以用它来绘制光标,
任何想法,如何使用慕斯位置指针在正确的位置绘制鼠标图像?
-(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-w/2;
int org_y = y-h/2;
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 */
}
Run Code Online (Sandbox Code Playgroud)
一切都很好,除了,鼠标位置略有偏差
您需要考虑鼠标光标的热点,即光标中的"活动点"像素.您可以从返回相对于光标坐标系左下角的-hotspot
方法获得此结果.NSCursor
NSPoint
所以你的代码应该是这样的:
NSPoint offset = [[NSCursor arrowCursor] hotSpot];
int org_x = (x - w/2) - offset.x;
int org_y = (y - h/2) - offset.y;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1147 次 |
最近记录: |