- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 CIImage,比方说 500x250 像素,我试图平铺它,所以它将变成 1000x500 图片,两行,每行两张图片,如下所示:
我正在尝试使用 Cocoa 上的 CIAffineTile 来做到这一点(我不确定这是否是最合适的过滤器)。
正如预期的那样,来自 Apple 的文档非常模糊和加密。
显然,过滤器的调用方式必须不同于 iOS 和 OSX,但 OSX 部分是神秘的。
这是我的代码:
我所做的是,我创建了 tile 过滤器,然后将其在每个方向上裁剪为图片大小的两倍 + 2,以在它们之间创建一个 2 像素的空间。
// the picture has to translate this amount?
CGAffineTransform translate = CGAffineTransformMakeTranslation(pictureWidth+2, pictureHeight+2);
CIFilter *filterTile = [CIFilter filterWithName:@"CIAffineTile"];
[filterTile setValue:[NSValue valueWithBytes:&translate
objCType:@encode(CGAffineTransform)]
forKey:@"inputTransform"];
CIVector *cropRect =[CIVector vectorWithX:0
Y:0
Z:2 * pictureWidth+2
W:2 * pictureHeight+2];
CIFilter *crop = [CIFilter filterWithName:@"CICrop"];
[crop setValue:[filterTile outputImage] forKey:@"inputImage"];
[crop setValue:cropRect forKey:@"inputRectangle"];
这会导致不正确的 CIImage。我看到的是这样的:
转换有什么问题?难道不是假设图像必须转换为平铺的像素数量吗?
最奇怪的部分:变换可以是任何东西,即使是恒等变换,结果也是一样的。
我试图猜测如何在 OSX 上做到这一点并想象这样的事情:
NSAffineTransform *translate = [NSAffineTransform transform];
[translate translateXBy:(pictureWidth + 2) yBy:(pictureHeight + 2];
CIFilter *filterTile = [CIFilter filterWithName:@"CIAffineTile"];
[filterTile setValue:imagem forKey:@"inputImage"];
但这以逆时针旋转 90 度(???)的图像结束。
最佳答案
从概念上讲,您可以将 CIAffineTile 过滤器想象成这样:
鉴于此实现,仿射不会对图像 block 之间的间隙产生任何影响,这是预期的行为。
如果您想要图像之间有额外的间隙,那么您需要在使用 CIAffineTile 之前用白色像素填充图像。这可以通过使用
[[i imageByCompositingOverImage:[CIImage imageWithColor:white]] imageByCroppingToRect:CGRectInset(i.extent,-1,-1)]
这里是一些代码,可以在没有填充的情况下执行 2x2 tile
CGAffineTransform xform = CGAffineTransformIdentity;
NSValue *xformObj = [NSValue valueWithBytes:&xform objCType:@encode(CGAffineTransform)];
image = [image imageByApplyingFilter:@"CIAffineTile"
withInputParameters:@{kCIInputTransformKey : xformObj} ];
image = [image imageByCroppingToRect:CGRectMake(0,0, 2*pictureWidth, 2*pictureHeight)];
关于ios - 如何在 Cocoa 上使用 CIAffineTile?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28069176/
我有一个 CIImage,比方说 500x250 像素,我试图平铺它,所以它将变成 1000x500 图片,两行,每行两张图片,如下所示: 我正在尝试使用 Cocoa 上的 CIAffineTile
我是一名优秀的程序员,十分优秀!