Question

(I already read this page, but it didn't help me CALayer not displaying)

I have a class called Image that has this field data:

uint8_t *data;

I already use this data to display this Image on a CALayer that I got gathering code from the internet.

I saw how to create another windows in my application, and I put a NSView inside it to display an Image using the method, I intend to display the histogram latter, but now I'm just trying to display again the same 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);
}

And this is my Window Controler:

@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

And I'm calling this way:

[frame wrapImageToCALayer:histogramDisplayLayer];

Note that histogramDisplayLayer is an external (CALayer *)

Was it helpful?

Solution 2

Just insert:

[display setWantsLayer:YES]; // view's backing store is using a Core Animation Layer

Before:

[display.layer addSublayer: histogramDisplayLayer];

[ Best way to change the background color for an NSView ]

OTHER TIPS

Your histogramDisplayLayer have no size defined, you just set a position but not its size. So init its frame, and this should fix your problem.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top