使用drawAtPoint和我的CIImage在屏幕上没有做任何事情

时间:2010-06-07 22:38:11

标签: objective-c cocoa

再次陷入困境。 :( 当我单击应用程序主窗口上的按钮时,我将以下代码塞进了调用的过程中。我只是想调整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

2 个答案:

答案 0 :(得分:1)

在Cocoa中的屏幕上绘图通常发生在 - [NSView drawRect:]覆盖内。我认为你没有这样做,所以你没有正确设置图形上下文。

答案 1 :(得分:0)

这个问题的一个解决方案是从CIImage创建一个NSCIImageRep,然后将该表示添加到新的NSImage,然后很容易以各种方式显示NSImage。我已经添加了上面用过的代码(参见“编辑#2”),其中我在NSImageView控件中显示“输出图像”。男人......这是多么的PITA!