首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CIFilter (CIStripesGenerator)和SKTexture?

CIFilter (CIStripesGenerator)和SKTexture?
EN

Stack Overflow用户
提问于 2014-03-22 14:21:39
回答 1查看 802关注 0票数 0

我正在尝试使用CIFilter生成一个条带,然后从它创建一个SKTexture。这是我的密码。

代码语言:javascript
复制
      CIFilter *filter = [CIFilter filterWithName:@"CIStripesGenerator"];
    [filter setDefaults];
    [filter setValue:[CIColor colorWithRed:1 green:1 blue:1] forKey:@"inputColor0"];
    [filter setValue:[CIColor colorWithRed:0 green:0 blue:0] forKey:@"inputColor1"];

   //updated the code, whith this line   
   //stil the same problem
    CIImage *croppedImage = [filter.outputImage imageByCroppingToRect:CGRectMake(0, 0, 320, 480)];

    SKTexture *lightTexture = [SKTexture textureWithImage:[UIImage imageWithCIImage:croppedImage]];

    SKSpriteNode *light = [SKSpriteNode spriteNodeWithTexture:lightTexture size:self.size];

但是,我在最后一行收到一个运行时错误,希望得到任何帮助,除了(lldb),编译器不会给出更多的解释。

更新:感谢rickster指导我找到解决方案。

代码语言:javascript
复制
-(UIImage*) generateImage {
// 1
CIContext *context = [CIContext contextWithOptions:nil];
CIFilter *filter = [CIFilter filterWithName:@"CIStripesGenerator"];
[filter setDefaults];
[filter setValue:[CIColor colorWithRed:1 green:1 blue:1] forKey:@"inputColor0"];
[filter setValue:[CIColor colorWithRed:0 green:0 blue:0] forKey:@"inputColor1"];
// 2
CGImageRef cgimg =
[context createCGImage:filter.outputImage fromRect:CGRectMake(0, 0, 320, 480)];
// 3
UIImage *newImage = [UIImage imageWithCGImage:cgimg];
// 4
CGImageRelease(cgimg);
return newImage;
 }

然后,我可以从图像中创建纹理:

代码语言:javascript
复制
    SKTexture *stripesTexture = [SKTexture textureWithImage:[self generateImage]];

    SKSpriteNode *stripes = [SKSpriteNode spriteNodeWithTexture:stripesTexture];
    stripes.position=CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));
    [self addChild: stripes];
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-22 16:15:45

这里有几个问题:

  1. 您没有用于呈现图像的核心图像上下文。创建一个具有: CIContext *context = CIContext contextWithOptions:0; 这可能无法提供实时呈现性能。但看起来你只需要一次生成静态纹理,所以这没什么。
  2. 大多数的发电机滤波器产生无限大的图像。您需要向过滤器链中添加一个裁剪过滤器,或者使用允许您指定所需图像的rect的方法来呈现图像,比如createCGImage:fromRect:。然后根据生成的SKTexture生成一个CGImageRef
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22578770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档