2

(私はすでにこのページを読みましたが、 CALayerが表示されないのを助けませんでした)

Imageこのフィールドデータを持つクラスがあります:

uint8_t *data;

私はすでにこれを使用して、インターネットからコードを収集した上でこれdataを表示しています。ImageCALayer

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 *)

4

2 に答える 2

2

histogramDisplayLayer にはサイズが定義されていません。位置を設定するだけで、サイズは設定しません。フレームを初期化すると、問題が解決するはずです。

于 2013-11-09T23:42:45.723 に答える
1

挿入するだけです:

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

前:

[display.layer addSublayer: histogramDisplayLayer];

[ NSView の背景色を変更する最良の方法]

于 2013-11-12T18:02:58.940 に答える