我希望在IOS中从UIImage
获取(x,y)位置和(宽度,高度)掩码的大小,我使用UIImage
作为掩码,如
我只想从这个UIImage
获取形状的框架,我使用代码就像
thumbImage.layer.mask?.position
thumbImage.layer.mask?.bounds
但我没有得到合适的位置和框架。
有必要使用此类型图像屏蔽其他图像没有任何其他选项。
请帮助我在UIView
中获得正确的面具框架和位置。
答案 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;