如何在ios中的UIView中找到掩模位置和大小

时间:2016-09-26 11:14:31

标签: ios uiimageview uiimage calayer cgrect

我希望在IOS中从UIImage获取(x,y)位置和(宽度,高度)掩码的大小,我使用UIImage作为掩码,如enter image description here 我只想从这个UIImage获取形状的框架,我使用代码就像

thumbImage.layer.mask?.position 
thumbImage.layer.mask?.bounds

但我没有得到合适的位置和框架。

  

有必要使用此类型图像屏蔽其他图像没有任何其他选项。

请帮助我在UIView中获得正确的面具框架和位置。

2 个答案:

答案 0 :(得分:0)

从图像中读取像素,并从图像中获取CGRect与设备宽度和高度进行比较。

- (CGRect)getRectFromImage:(UIImage*)image
{

    // First get the image into your data buffer
    CGImageRef imageRef = [image CGImage];
    NSUInteger width = CGImageGetWidth(imageRef);
    NSUInteger height = CGImageGetHeight(imageRef);
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    unsigned char *rawData = malloc(height * width * 4);
    NSUInteger bytesPerPixel = 4;
    NSUInteger bytesPerRow = bytesPerPixel * width;
    NSUInteger bitsPerComponent = 8;
    CGContextRef context = CGBitmapContextCreate(rawData, width, height,
                                                 bitsPerComponent, bytesPerRow, colorSpace,
                                                 kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
    CGColorSpaceRelease(colorSpace);

    CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageRef);
    CGContextRelease(context);


    int x = 0;
    int y = 0;
    int xPos = 0;
    int yPos = 0;

    int xMax = 0;
    int yMax = 0;


    for (x = 0; x < width; x++) {
        for (y = 0; y < height; y++) {
            unsigned char alphaByte = rawData[(y*bytesPerRow)+(x*bytesPerPixel)+3];
            if (alphaByte > 0) {

            if (xPos == 0) {
                xPos = x;
            }

            if (yPos == 0) {
                yPos = y;
            }
                if (x < xPos) {
                    xPos = x;
                }

                if (y < yPos) {
                    yPos = y;
                }

                if (x > xMax) {
                    xMax = x;
                }

                if (y > yMax) {
                    yMax = y;
                }
            }
        }
    }

    NSLog(@"(%i,%i,%i,%i)", xPos, yPos,xMax-xPos,yMax-yPos);


    free(rawData);

    return CGRectMake(xPos, yPos, xMax-xPos, yMax-yPos);
}

答案 1 :(得分:-1)

您可以创建变量来获取此代码的大小和位置:CGPoint Position;     Position = thumbImage.frame.origin;     CGSize尺寸;     Size = thumbImage.frame.size;