【发布时间】:2013-11-21 19:05:51
【问题描述】:
(我已经阅读了此页面,但对我没有帮助CALayer not displaying)
我有一个名为 Image 的类,它有这个字段数据:
uint8_t *data;
我已经使用此data 在CALayer 上显示此Image,这是我从互联网收集的代码。
我看到了如何在我的应用程序中创建另一个窗口,我在其中放置了一个NSView 以使用该方法显示一个Image,我打算显示后者的直方图,但现在我只是想显示又是同一张图片:
-(void)wrapImageToCALayer: (CALayer*) layer{
if(!layer) return;
CGColorSpaceRef grayColorSpace = CGColorSpaceCreateDeviceGray();
CGContextRef context = CGBitmapContextCreate(data, width, height, 8, step, grayColorSpace, kCGImageAlphaNone);
CGImageRef dstImage = CGBitmapContextCreateImage(context);
dispatch_sync(dispatch_get_main_queue(), ^{
layer.contents = (__bridge id)dstImage;
});
CGImageRelease(dstImage);
CGContextRelease(context);
CGColorSpaceRelease(grayColorSpace);
}
这是我的窗口控制器:
@implementation HistogramControllerWindowController
@synthesize display;
- (id)initWithWindow:(NSWindow *)window{
self = [super initWithWindow:window];
if (self) {
// Initialization code here.
}
return self;
}
- (void)windowDidLoad
{
// Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
[super windowDidLoad];
histogramDisplayLayer = [CALayer layer];
[histogramDisplayLayer setContentsGravity:AVLayerVideoGravityResizeAspectFill];
histogramDisplayLayer.position = CGPointMake(display.frame.size.width/2., display.frame.size.height/2.);
[histogramDisplayLayer setNeedsDisplay];
[display.layer addSublayer: histogramDisplayLayer];
}
@end
我这样称呼:
[frame wrapImageToCALayer:histogramDisplayLayer];
注意histogramDisplayLayer是一个外部(CALayer *)
【问题讨论】:
-
显示代码而不费心解释变量是一回事。将图层添加到图层是另一回事。
-
对不起,我没听懂。你是说我不应该这样做?? [display.layer addSublayer: histogramDisplayLayer];
标签: objective-c xcode macos calayer nsview