Objective c 将drawAtPoint与我的CIImage一起使用,在屏幕上不执行任何操作

Objective c 将drawAtPoint与我的CIImage一起使用,在屏幕上不执行任何操作,objective-c,cocoa,Objective C,Cocoa,又卡住了( 当我点击应用程序主窗口上的一个按钮时,我将以下代码塞进一个调用的过程中。我只是尝试调整一个CIIMage,然后显示结果。在这一点上,我甚至不担心在哪里/如何显示它。我只是尝试在窗口上猛击它,以确保我的转换工作。这段代码是我想通过drawAtPoint信息往下看。但是我从来没有在屏幕上看到任何东西。怎么了?谢谢 此外,就在窗口上的特定位置显示它而言……最好的技术是在窗口上放置某种框架,然后获取该框架的坐标并“绘制”该矩形?或者使用IB的特定控件?或者什么?再次感谢 // earlier

又卡住了( 当我点击应用程序主窗口上的一个按钮时,我将以下代码塞进一个调用的过程中。我只是尝试调整一个CIIMage,然后显示结果。在这一点上,我甚至不担心在哪里/如何显示它。我只是尝试在窗口上猛击它,以确保我的转换工作。这段代码是我想通过drawAtPoint信息往下看。但是我从来没有在屏幕上看到任何东西。怎么了?谢谢

此外,就在窗口上的特定位置显示它而言……最好的技术是在窗口上放置某种框架,然后获取该框架的坐标并“绘制”该矩形?或者使用IB的特定控件?或者什么?再次感谢

// earlier I initialize a NSImage from JPG file on disk.  
// then create NSBitmapImageRep from the NSImage.  This all works fine.
// then ...
CIImage * inputCIimage = [[CIImage alloc] initWithBitmapImageRep:inputBitmap];
if (inputCIimage == Nil)
    NSLog(@"could not create CI Image");
else {
    NSLog (@"CI Image created.  working on transform");
    CIFilter *transform = [CIFilter filterWithName:@"CIAffineTransform"];
    [transform setDefaults];
    [transform setValue:inputCIimage forKey:@"inputImage"];
    NSAffineTransform *affineTransform = [NSAffineTransform transform];
    [affineTransform rotateByDegrees:3];
    [transform setValue:affineTransform forKey:@"inputTransform"];
    CIImage * myResult = [transform valueForKey:@"outputImage"];
    if (myResult == Nil)
        NSLog(@"Transformation failed");
    else {
        NSLog(@"Created transformation successfully ... now render it");

        [myResult drawAtPoint: NSMakePoint ( 0,0 )
                     fromRect: NSMakeRect  ( 0,0,128,128 )
                    operation: NSCompositeSourceOver
                     fraction: 1.0];                    //100% opaque
        [inputCIimage release];
    }
}
编辑#1:

snip-删除了下面提到的先前的代码示例(在关于drawRect的评论中),但它不起作用

编辑#2:添加一些确实有效的代码,供将来可能会被困在同一问题上的其他人使用。不确定这是否是最好的方法…但对于我快速而肮脏的目的来说,它确实有效。因此,此新代码(如下)替换了整个[myResult drawAtPoint…]来自上面的消息/在我的初始问题中。此代码获取由CIImage转换创建的图像,并将其显示在NSImageView控件中

NSImage *outputImage;
NSCIImageRep *ir;
ir = [NSCIImageRep imageRepWithCIImage:myResult];
outputImage = [[[NSImage alloc] initWithSize: NSMakeSize(inputImage.size.width, inputImage.size.height)] autorelease];
[outputImage addRepresentation:ir];
[outputImageView setImage: outputImage];  //outputImageView is an NSImageView control on my application's main window

Cocoa中的屏幕绘图通常在-[NSView drawRect:]中进行覆盖。我认为您没有这样做,因此您没有正确设置图形上下文。

因此,这个问题的一个解决方案是从CIImage创建一个NSCIImageRep,然后将该表示添加到一个新的NSImage,然后就可以很容易地以各种方式显示NSImage。我添加了上面使用的代码(请参见“编辑#2”),其中我在NSImageView控件中显示“输出图像”。伙计…这是一个多大的PITA!

因此我应该将drawAtPoint消息移动到drawRect覆盖中,然后用传入的dirtyRect参数替换我的NSMakeRect定义(0,0128128)。你能帮我吗?如果我在[NSGraphicsContext saveGraphicsState];和[NSGraphicsContext restoreGraphicsState];这样行吗?我将尝试用我试图描述/询问的内容编辑我的原始帖子…drawRect:中不需要任何NSGraphicsContext内容,更重要的是,您不需要调用drawRect:。当系统认为您需要绘制时,会调用您的drawRect:,并为您设置图形上下文。有人能给我举一个示例吗这是什么地方?我正在阅读苹果文档、论坛、谷歌搜索示例代码等等。但我发现的示例似乎不是来自xcode项目/cocoa应用程序。而且我对所有这些都没有足够的经验,无法将我发现的片段翻译成cocoa。或者……有人想给我写一个示例xcode项目/coc吗oa应用程序至:将JPG文件加载到位图中,然后加载到CIImage中,然后进行转换(如上面的示例),然后显示原始图像和修改后的图像。所有这些都具有良好的内存管理、OO设计、注释等。我会付费!查看CIImage类的文档,并查看标题“相关示例代码”。您还应该阅读“Cocoa绘图指南”.在发布我的问题之前,我已经花了好几个小时阅读了这些文档。根据那个文档,我想不出来。可能是因为我没有经验,但不管怎样,我还是被卡住了。不过,我最终还是做了一些事情,并编辑了原始帖子以反映它。。。