Domanda

Ho un NSMatrix con un paio di NSButtons in esso che non hanno un testo, ma sono solo le immagini. Una delle immagini viene scaricato da internet e vorrei avere angoli arrotondati nella mia applicazione OS X.

Ho trovato una risposta che quasi è quello che cercavo: Come disegnare un arrotondata NSImage ma purtroppo agisce pazzo quando lo uso:

// In my NSButtonCell subclass
- (void)drawImage:(NSImage*)image withFrame:(NSRect)imageFrame inView:(NSView*)controlView
{
    // [super drawImage:image withFrame:imageFrame inView:controlView];

    [NSGraphicsContext saveGraphicsState];

    NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect:imageFrame xRadius:5 yRadius:5];
    [path addClip];

    [image drawInRect:imageFrame fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0];

    [NSGraphicsContext restoreGraphicsState];
}

Il problema è che se l'immagine è in parte trasparente (PNG), allora è completamente distrutto e vedo solo un paio di pixel bianchi su sfondo nero.

E se l'immagine non è trasparente, allora ottiene gli angoli arrotondati, ma è ruotato di 180 ° e non so perché.

Qualche suggerimento?

È stato utile?

Soluzione

È necessario assicurarsi di impostare la dimensione del immagine correttamente prima di disegnare, e si dovrebbe utilizzare il metodo NSImage drawInRect:fromRect:operation:fraction:respectFlipped:hints: per garantire l'immagine viene disegnata il modo corretto su:

- (void)drawImage:(NSImage*)image withFrame:(NSRect)imageFrame inView:(NSView*)controlView
{
    // [super drawImage:image withFrame:imageFrame inView:controlView];

    [NSGraphicsContext saveGraphicsState];

    NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect:imageFrame xRadius:5 yRadius:5];
    [path addClip];

    //set the size
    [image setSize:imageFrame.size];

    //draw the image
    [image drawInRect:imageFrame fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0 respectFlipped:YES hints:nil];

    [NSGraphicsContext restoreGraphicsState];
}

L'immagine dovrebbe elaborare correttamente se si esegue questa operazione, anche se si tratta di un'immagine traslucida PNG.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top