/ / Zaoblené rohy NSImage v NSButtonCell - macos, kakao, nsimage, nsbuttoncell

Zaoblené NSImage rohy v NSButtonCell - macos, kakao, nsimage, nsbuttoncell

Mám v systéme NSMatrix s niekoľkými súbormi NSButtonsto, čo nemá žiaden text, ale sú to iba obrázky. Jeden z obrázkov je stiahnutý z internetu a chcel by som mať zaoblené rohy v mojej aplikácii OS X.

Našiel som jednu odpoveď, ktorú som skoro hľadal: Ako nakresliť zaoblený NSImage ale bohužiaľ, keď to používam:

// 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];
}

Problém je, že ak je obrázok čiastočne priehľadný (PNG), je úplne zničený a na čiernom pozadí vidím len niekoľko bielych pixelov.

A ak obrázok nie je priehľadný, dostane zaoblené rohy, ale je otočený o 180 ° a neviem prečo.

Nejaké návrhy?

odpovede:

3 pre odpoveď č. 1

Predtým, ako ho nakreslíte, musíte sa uistiť, že ste veľkosť obrázka nastavili správne, a mali by ste použiť NSImage metóda drawInRect:fromRect:operation:fraction:respectFlipped:hints: na zabezpečenie správneho vykreslenia obrázka:

- (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];
}

Ak to urobíte, mal by sa kresliť správne, aj keď je to priesvitný obraz PNG.