def test_color_correction(self): color = RGBColor(RGBColor.name_to_rgb('DarkGray')) self.assertEqual((169, 169, 169), color.rgb) # Tests default color correction profile (should be no correction) color_correction_profile = RGBColorCorrectionProfile() corrected_color = color_correction_profile.apply(color) self.assertEqual((169, 169, 169), corrected_color.rgb) # Test correction with default parameters color_correction_profile.generate_from_parameters() corrected_color = color_correction_profile.apply(color) self.assertEqual((91, 91, 91), corrected_color.rgb) # Test correction with new parameters color_correction_profile.generate_from_parameters(gamma=2.0, whitepoint=(0.9, 0.85, 0.9), linear_slope=0.75, linear_cutoff=0.1) corrected_color = color_correction_profile.apply(color) self.assertEqual((77, 67, 77), corrected_color.rgb) # Test default correction profile default_profile = RGBColorCorrectionProfile.default() corrected_color = default_profile.apply(color) self.assertEqual((81, 81, 81), corrected_color.rgb) corrected_color = default_profile.apply(RGBColor((254, 254, 254))) self.assertEqual((252, 252, 252), corrected_color.rgb)
def initialise_light_subsystem(self): """Initialise the light subsystem.""" if self._initialised: return self._initialised = True self.machine.validate_machine_config_section('light_settings') if self.machine.config['light_settings']['color_correction_profiles'] is None: self.machine.config['light_settings']['color_correction_profiles'] = ( dict()) # Create the default color correction profile and add it to the machine default_profile = RGBColorCorrectionProfile.default() self.light_color_correction_profiles['default'] = default_profile # Add any user-defined profiles specified in the machine config file for profile_name, profile_parameters in ( self.machine.config['light_settings'] ['color_correction_profiles'].items()): self.machine.config_validator.validate_config( 'color_correction_profile', self.machine.config['light_settings']['color_correction_profiles'] [profile_name], profile_parameters) profile = RGBColorCorrectionProfile(profile_name) profile.generate_from_parameters( gamma=profile_parameters['gamma'], whitepoint=profile_parameters['whitepoint'], linear_slope=profile_parameters['linear_slope'], linear_cutoff=profile_parameters['linear_cutoff']) self.light_color_correction_profiles[profile_name] = profile # add setting for brightness self.machine.settings.add_setting(SettingEntry("brightness", "Brightness", 100, "brightness", 1.0, {0.25: "25%", 0.5: "50%", 0.75: "75%", 1.0: "100% (default)"}))
def device_class_init(cls, machine: MachineController): """Initialise all LEDs. Args: machine: MachineController which is used """ cls.machine = machine cls.leds_to_fade = set() cls.leds_to_update = set() machine.validate_machine_config_section('led_settings') if machine.config['led_settings']['color_correction_profiles'] is None: machine.config['led_settings']['color_correction_profiles'] = ( dict()) # Generate and add color correction profiles to the machine machine.led_color_correction_profiles = dict() # Create the default color correction profile and add it to the machine default_profile = RGBColorCorrectionProfile.default() machine.led_color_correction_profiles['default'] = default_profile # Add any user-defined profiles specified in the machine config file for profile_name, profile_parameters in ( machine.config['led_settings'] ['color_correction_profiles'].items()): machine.config_validator.validate_config( 'color_correction_profile', machine.config['led_settings'] ['color_correction_profiles'][profile_name], profile_parameters) profile = RGBColorCorrectionProfile(profile_name) profile.generate_from_parameters( gamma=profile_parameters['gamma'], whitepoint=profile_parameters['whitepoint'], linear_slope=profile_parameters['linear_slope'], linear_cutoff=profile_parameters['linear_cutoff']) machine.led_color_correction_profiles[profile_name] = profile # schedule the single machine-wide update to write the current led of # each LED to the hardware cls._updater_task = machine.clock.schedule_interval( cls.update_leds, 1 / machine.config['mpf']['default_led_hw_update_hz']) machine.mode_controller.register_stop_method(cls.mode_stop) machine.settings.add_setting( SettingEntry("brightness", "Brightness", 100, "brightness", 1.0, { 0.25: "25%", 0.5: "50%", 0.75: "75%", 1.0: "100% (default)" }))