Если я пишу код рисования в Core Graphics на Mac OS X или iPhone OS, я могу установить красный цвет активной заливки, вызвав:
CGContextSetRGBFillColor(context, 1.0, 0.0, 0.0, 1.0); // RGB(1,0,0)
Если мне нужно 50 % серого, я мог бы вызвать:
CGContextSetRGBFillColor(context, 0.5, 0.5, 0.5, 1.0); // RGB(0.5,0.5,0.5)
Но для оттенков серого заманчиво сделать более короткую линию и позвонить:
CGContextSetGrayFillColor(context, 0.5, 1.0);
Однако эта функция НЕ просто вызывает метод RGB с трехкратным копированием значения интенсивности; вместо этого он меняет цветовое пространство контекста с DeviceRGB на DeviceGray. Следующий вызов метода RGB переключит его обратно.
Мне любопытно узнать:
- Каков штраф за переключение цветовых пространств?
- Есть ли штраф за рисование, когда цветовое пространство вашего контекста не соответствует собственному цветовому пространству вашего устройства? (т. е. рисование в DeviceGray по сравнению с DeviceRGB)
Я спрашиваю из технического любопытства, а не из желания преждевременной оптимизации, поэтому, пожалуйста, сведите ваши наставления к минимуму.