1

我对不规则形状有疑问。我搜索了很多,但没有什么对我有用。我有许多不规则形状的框架,每个框架再次分为子区域。我想将照片库中的图像放入框架的每个子区域。但是我无法获得每个子区域的位置,并且由于形状也是不规则的,所以又是另一个问题来适应该区域的图像。谁能帮我 !!这是该框架的一个示例。图像有两个奇怪的形状框架

4

2 回答 2

0

你永远不能有不规则形状的框架。框架将始终呈矩形。您可以通过检测透明区域来完成。

参考这个链接。它会让你知道如何做到这一点:)

于 2012-07-04T05:16:09.570 回答
0

你想通过圆弧来剪辑各种图像吗?例如,这是一个包含四张图片的屏幕快照(只是我在http://images.google.com上搜索狗时得到的随机图片):

未裁剪

这里是用圆圈裁剪的相同的四张图像(或者更准确地说,四张图像中的每一张都分别被相同的圆形路径裁剪):

裁剪

这是执行此操作的代码

- (UIImage *)cropImage:(UIImage *)image locatedAt:(CGRect)imageFrame byCircleAt:(CGPoint)center withRadius:(float)radius
{
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef context = CGBitmapContextCreate(NULL, imageFrame.size.width, imageFrame.size.height, 8, 4 * imageFrame.size.width, colorSpace, kCGImageAlphaPremultipliedFirst);

    CGContextBeginPath(context);
    CGRect ellipseFrame = CGRectMake(center.x - imageFrame.origin.x - radius, imageFrame.size.height - (center.y - imageFrame.origin.y - radius) - radius * 2.0, radius * 2.0, radius * 2.0);
    CGContextAddEllipseInRect(context, ellipseFrame);
    CGContextClosePath(context);
    CGContextClip(context);

    CGContextDrawImage(context, CGRectMake(0, 0, imageFrame.size.width, imageFrame.size.height), image.CGImage);

    CGImageRef imageMasked = CGBitmapContextCreateImage(context);
    CGContextRelease(context);
    CGColorSpaceRelease(colorSpace);

    UIImage *newImage = [UIImage imageWithCGImage:imageMasked];

    CGImageRelease(imageMasked);

    return newImage;
}

- (void)addSingleCroppedImage:(UIImage *)image at:(CGRect)imageFrame byCircleAt:(CGPoint)center withRadius:(float)radius
{
    UIImage *newImage = [self cropImage:image locatedAt:imageFrame byCircleAt:center withRadius:radius];
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:imageFrame];
    imageView.image = newImage;
    [self.view addSubview:imageView];
}

- (void)addCroppedImages
{
    NSString *bundlePath = [[NSBundle mainBundle] resourcePath];

    CGPoint center = CGPointMake(self.view.frame.size.width / 2.0, self.view.frame.size.width / 2.0);
    float radius = 150.0;

    UIImage *dog1 = [UIImage imageWithContentsOfFile:[bundlePath stringByAppendingPathComponent:@"imgres-1.jpg"]];
    UIImage *dog2 = [UIImage imageWithContentsOfFile:[bundlePath stringByAppendingPathComponent:@"imgres-2.jpg"]];
    UIImage *dog3 = [UIImage imageWithContentsOfFile:[bundlePath stringByAppendingPathComponent:@"imgres-3.jpg"]];
    UIImage *dog4 = [UIImage imageWithContentsOfFile:[bundlePath stringByAppendingPathComponent:@"imgres-4.jpg"]];

    CGRect frame;
    UIImage *currentImage;

    // upper left

    currentImage = dog1;
    frame = CGRectMake(center.x - currentImage.size.width, center.y - currentImage.size.height, currentImage.size.width, currentImage.size.height);
    [self addSingleCroppedImage:currentImage at:frame byCircleAt:center withRadius:radius];

    // upper right

    currentImage = dog2;
    frame = CGRectMake(center.x, center.y - currentImage.size.height, currentImage.size.width, currentImage.size.height);
    [self addSingleCroppedImage:currentImage at:frame byCircleAt:center withRadius:radius];

    // lower left

    currentImage = dog3;
    frame = CGRectMake(center.x - currentImage.size.width, center.y, currentImage.size.width, currentImage.size.height);
    [self addSingleCroppedImage:currentImage at:frame byCircleAt:center withRadius:radius];

    // lower right

    currentImage = dog4;
    frame = CGRectMake(center.x, center.y, currentImage.size.width, currentImage.size.height);
    [self addSingleCroppedImage:currentImage at:frame byCircleAt:center withRadius:radius];
}
于 2012-07-04T08:23:06.623 回答