再次陷入困境。 :( 当我单击应用程序主窗口上的按钮时,我将以下代码塞进了调用的过程中。我只是想调整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
答案 0 :(得分:1)
在Cocoa中的屏幕上绘图通常发生在 - [NSView drawRect:]覆盖内。我认为你没有这样做,所以你没有正确设置图形上下文。
答案 1 :(得分:0)
这个问题的一个解决方案是从CIImage创建一个NSCIImageRep,然后将该表示添加到新的NSImage,然后很容易以各种方式显示NSImage。我已经添加了上面用过的代码(参见“编辑#2”),其中我在NSImageView控件中显示“输出图像”。男人......这是多么的PITA!