[英]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.