繁体   English   中英

获取UIImage的特定Rect

[英]Get Specific Rect of UIImage

由于框架的厚度未知,因此需要为其框架装配一个UIImage(本身也是一个UIImage)。 附有图像。

我们如何在UIImage中检测相同的UIColor的矩形?

要获得ain图像的帧就这么简单:

CGRect myFrame = myUIImageView.frame;

这是您要的吗?

UIImage *img=[UIImage imageNamed:@"yourimagename.png(any)"];

您可以利用它来将帧设置为图像帧,

CGRect imageFrame=CGRectMake(x,y,img.size.width,img.size.height);

注意:

img.size.width给您图像的宽度,img.size.height给您图像的高度

您可以检查像素(0,0)处的颜色 这将是框架的颜色。 然后,您将向下移动1px,向左移动1px,直到获得不同的颜色-这就是查找帧粗细的方式。

像这样:

    self.yourImage = [UIImage imageNamed:@"painting-with-border.png"];

    NSLog(@"original size: %@", NSStringFromCGSize(self.yourImage.size));

    BOOL success = NO;
    CGFloat x_frame = 1.0;
    CGFloat y_frame = 1.0;

    CGFloat x_max = self.yourImage.size.width/2.0;
    CGFloat y_max = self.yourImage.size.height/2.0;

    UIColor *frameColor = [self.yourImage colorAtPixel: CGPointMake (1.0,1.0)];

    NSString *hexFrameColor = [frameColor hexStringFromColor];
    NSLog (@"frame color: %@", hexFrameColor);

    UIColor *testPixelColor;
    NSString *hexTestPixelColor;

    while ((!success) && (x_frame < x_max) && (y_frame < y_max)) {

        x_frame = x_frame + 1.0;
        y_frame = y_frame + 1.0;

        testPixelColor = [self.yourImage colorAtPixel: CGPointMake (x_frame,y_frame)];
        hexTestPixelColor = [testPixelColor hexStringFromColor];

        NSLog(@"color at pixel (%.0f,%.0f): %@", x_frame,y_frame,hexTestPixelColor);

        if (![hexFrameColor isEqualToString: hexTestPixelColor]) {
            success = YES;
            NSLog (@"found frame border at (%.0f,%.0f)", x_frame,y_frame);
        }
    }

    CGRect newFrame;

    if (success) {

        newFrame = CGRectMake(x_frame,y_frame,self.yourImage.size.width-x_frame,self.yourImage.size.height-y_frame);
        NSLog(@"To crop image inside frame use: %@", NSStringFromCGRect(newFrame));


    } else {

        NSLog (@"couldn't define frame width");
    }

此方法将检查图片是否位于图片中间。

注意:

ColorAtPixel不是UIKit的一部分。 您可以在Ole Begemann的OBShapedButton中获得它。

hexStringFromColor不是UIKit的一部分。 您可以在uicolor-utilities中找到该类别。

对于裁剪UIImage您可以在SO上找到很多方法,但这不是问题的一部分。

此代码已通过图片进行了测试:

带边框的图像

输出为:

原始大小:{314,451}

镜框颜色:980C0C

像素(2,2)的颜色:980C0C

像素(3,3)的颜色:980C0C

像素(4,4)的颜色:980C0C

像素(5,5)的颜色:980C0C

像素(6,6)的颜色:414429

在(6,6)找到框架边框

要在帧内裁剪图像,请使用:{{6,6},{308,445}}

注意:仅当边框的颜色完全相同时,此方法才有效。 (压缩的) .jpg图像中的某些边框可能具有颜色略有变化的边框。 为此,您应该使用一种检查颜色相似性的算法-但这完全是另一个主题。

同样,此代码是针对所有侧面具有相同厚度的帧的图像编写的。 我确定在上下框架的厚度与左右框架厚度不同的情况下,您可以修改代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM