处理单击图像的非透明区域仅查看ios

时间:2014-04-09 08:57:36

标签: ios image

我想要检测图像各个部分的触摸。例如,我有一个身体的图像,胸部,头部,腿部有不同的部分。因此,如果用户点击手,只有手部分应该只接收触摸而不是图像中的透明区域。这些部分共享一定量的相同帧enter image description here

Body image with diifrent section

enter image description here

2 个答案:

答案 0 :(得分:1)

这段代码,我从另一个stackoverflow用户那里为我调整,可以获得触摸点的alpha值:

CFDataRef pixelData = CGDataProviderCopyData(CGImageGetDataProvider(image.CGImage));
const UInt8* data = CFDataGetBytePtr(pixelData);

//values doubled because image is retina
float width = image.size.width*2.0;
float height = image.size.height*2.0;
float x = point.x*2.0;
float y = point.y*2.0;

if (x < 0 ||
    y < 0 ||
    x > width ||
    y > height)
    return nil;

int pixelInfo = ((width  * y) + x ) * 4; // for png

UInt8 alpha = data[pixelInfo + 3];
CFRelease(pixelData);

您可以使用它来检查用户是否在透明区域中单击。

至于检测不同区域(手,腿,头等),我建议为每个部分定义一些近似矩形,并用它来检查触点是否在其中任何一个内部:

    CGRectContainsPoint(rect, point);

答案 1 :(得分:0)

我通过使用相同的SVG图像来计算它,并且检查触摸位置在绘制的路径内。使用pocketSVG读取SVG图像 这是相同的链接

https://github.com/pocketsvg/PocketSVG