如何在ios的UIView中找到遮罩的位置和大小

Posted

技术标签:

【中文标题】如何在ios的UIView中找到遮罩的位置和大小【英文标题】:how to find mask position and size in UIView in ios 【发布时间】:2016-09-26 11:14:30 【问题描述】:

我想在 ios 中从 UIImage 获取掩码的 (x,y)position 和 (width,Height)size,我使用 UIImage 作为掩码,如 我只想从这个UIImage 中获取形状的框架,我使用了类似的代码

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

但我没有得到正确的位置和框架。

必须使用这种类型的图像来屏蔽其他图像的任何其他选项。

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

【问题讨论】:

【参考方案1】:

从图像中读取像素,并在从图像中获取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);

【讨论】:

【参考方案2】:

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

【讨论】:

我想要从掩码中获取动态帧,这只是示例,我有很多不同的图像用于掩码

以上是关于如何在ios的UIView中找到遮罩的位置和大小的主要内容,如果未能解决你的问题,请参考以下文章

[Vue Js]如何实现一个带遮罩的全屏div

带遮罩的全宽图像

创建带遮罩的文本框,但在空白时隐藏带遮罩的字符

Zbrush 遮罩挤出后,如何删除被遮罩的面

如何使用 Accelerate Framework 将带有遮罩的图像组合成一个 UIImage?

ZBrush中设置背面遮罩的两种方法