Как потянуть округленный NSImage

Я нашел "направляющие Путем" Obie Fernandez превосходный и часто относился к нему, когда Гибкая веб-разработка с направляющими, казалось, не заходила достаточно далеко. У Obie Fernandez есть достойное блог также.

7
задан Adrian 4 December 2009 в 21:35
поделиться

2 ответа

Вам нужно сохранить набор клипов при рисовании изображения и вместо этого восстановить контекст. Также я не думаю, что вы хотите использовать композицию «in», а скорее «over», если вы просто хотите рисовать изображение в обычном режиме, не принимая во внимание прозрачность назначения. Попробуйте что-нибудь вроде:

[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];
23
ответ дан 6 December 2019 в 04:59
поделиться

Просто чтобы предоставить немного больше информации о том, что вы сделали неправильно:

Цель сохранения и восстановления gstate - иметь возможность отменить ваши изменения в gstate. В вашем случае восстановление gsave после обрезки отменило клип. Вот почему решение (как объяснил Рулт) состоит в том, чтобы нарисовать то, что вы хотите обрезать , прежде чем вы восстановите состояние gstate.

3
ответ дан 6 December 2019 в 04:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: