2012-03-07 33 views
1

由于帧的厚度未知,因此需要为其帧(也是自己的UIImage)适合UIImage。图像被附加。获取UIImage的具体信息

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

回答

0

为了得到艾因图像的帧是因为这很容易:

CGRect myFrame = myUIImageView.frame; 

这是你问什么?

+0

不要这样想:他问的是同一个UIColor的矩形 - 我猜他想要减去图像上可见帧的粗细(不是图层的边框)。 – 2012-03-07 09:29:52

0
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

感谢您的回答... – Injar 2012-03-07 09:47:22

0

您可以检查像素(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然后你可以在这里找到很多方法,但这不是你的问题的一部分。

此代码用图像进行测试:

image with border

输出是:

原始大小:{314,451}

帧颜色:980C0C

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

c的olor在像素(3,3):980C0C

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

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

颜色(6,6) :414429

在(6,6)

帧使用内部发现帧边界要裁剪图像:{{6,6},{308,445}}

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

此代码是为在所有边上具有相同厚度的图像写入的。我相信你可以修改上/下框架的厚度与左/右厚度不同的情况。

+0

这里的“yourImage”是UIImage的实例吗? B'coz上面的代码为yourImage.frame提供了erroe: – Injar 2012-03-07 10:18:50

+0

@ user1254220:当然 - 你不能复制粘贴 - 你必须修改你的代码。您还必须从底部的链接下载代码,并将适当的文件包含到您的项目中。 – 2012-03-07 10:26:04

+0

是的,我做到了这一点,但它不能正常工作。 – Injar 2012-03-07 10:42:09