如何制作非矩形形状的图像

Posted

技术标签:

【中文标题】如何制作非矩形形状的图像【英文标题】:How To make image of nonRectangular shape 【发布时间】:2012-07-05 10:55:59 【问题描述】:

我在创建不规则形状的图像时遇到问题。这是我的框架示例。

请提供任何想法来创建这样的图像。它包含两个不同帧中的两个图像。但是这两张图片在装入框架后都隐藏了一部分。

【问题讨论】:

解决方案是你必须将图像框架作为图像,中心透明,并将实际图像放在后面 【参考方案1】:

您必须创建遮罩图像,以遮盖原始图像的一部分。 试试看How to Mask an UIImageView 可能会有所帮助...

【讨论】:

不,你没有得到我的问题。当我触摸或缩放图像时,这两个图像都是实际大小,即矩形形状。只有图像的视图就像是某些东西隐藏了图像的一部分。【参考方案2】:

你可以使用面具:

- (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage

    CGImageRef maskRef = maskImage.CGImage; 

    CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
                                    CGImageGetHeight(maskRef),
                                    CGImageGetBitsPerComponent(maskRef),
                                    CGImageGetBitsPerPixel(maskRef),
                                    CGImageGetBytesPerRow(maskRef),
                                    CGImageGetDataProvider(maskRef), NULL, false);

    CGImageRef masked = CGImageCreateWithMask([image CGImage], mask);

    return [UIImage imageWithCGImage:masked];

图像是您的原始图像。 maskImage 是黑白图像。如果 maskImage 为黑色,则将显示您的原始图像。

【讨论】:

不,你没有得到我的问题。当我触摸或缩放图像时,这两个图像都是实际大小,即矩形形状。仅查看图像就像隐藏了图像的一部分【参考方案3】:

你需要有边框的图像来掩盖你的 imagview 的图像。现在这样做:

 #import <QuartzCore/QuartzCore.h>
 // remember to include Framework as well

CALayer *mask = [CALayer layer];
mask.contents = (id)[[UIImage imageNamed:@"bordered_image_mask.png"] CGImage]; // here bordered image
mask.frame = CGRectMake(5, 5, <img_width>, <img_height>); // here x and y is 5 to show white boder around like in image
yourImageView.layer.mask = mask;
yourImageView.layer.masksToBounds = YES;

【讨论】:

图像添加到滚动视图上,所以第一次显示是这样的。但实际上当我触摸或滑动时,这是矩形的!

以上是关于如何制作非矩形形状的图像的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Canvas 中制作药丸形状? (基本上是圆角矩形)

如何在android中动态地使形状可拖动和调整大小

不规则可点击形状的图案

使用非矩形形状在 flex 中裁剪图像

如何制作不规则形状的 UIScrollView?

如何在 main() 函数之外制作形状