@Nonnull public static ColorPoint colorLab (final double l, final double a, final double b) { return new LabColorPoint(l, a, b, ColorSpace.Lab); }
@Nonnull public static XYZColorPoint colorXYZ (final double x, final double y, final double z) { return new XYZColorPoint(x, y, z, ColorSpace.XYZ); }
@Nonnull public static ColorTemperature kelvin (final @Nonnegative int value) { return new ColorTemperature(value, Scale.K); }
/******************************************************************************************************************* * * Answers to the request for a measurement. * ******************************************************************************************************************/ public void onMeasurementRequest (final @ListensTo @Nonnull MeasurementRequest message) throws InterruptedException { log.info("onMeasurementRequest({})", message); Thread.sleep(500); final ColorCoordinatesSet coordinatesSet = new ColorCoordinatesSet(colorLab(r.nextDouble() * 100, r.nextDouble() * 100, r.nextDouble() * 100), colorXYZ(r.nextDouble() * 100, r.nextDouble() * 100, r.nextDouble() * 100)); final MeasureWithPrecision<ColorTemperature> ccTemp = measureWithPrecision(kelvin(2000 + r.nextInt(6000)), r.nextDouble() * 10); final MeasureWithPrecision<ColorTemperature> planckianTemp = measureWithPrecision(kelvin(2000 + r.nextInt(6000)), r.nextDouble() * 10); final MeasureWithPrecision<ColorTemperature> daylightTemp = measureWithPrecision(kelvin(2000 + r.nextInt(6000)), r.nextDouble() * 10); new MeasurementMessage(coordinatesSet, ccTemp, planckianTemp, daylightTemp).send(); } }
/******************************************************************************************************************* * * Answers to the request for a measurement. * ******************************************************************************************************************/ public void onMeasurementRequest (final @ListensTo @Nonnull MeasurementRequest message) throws InterruptedException { log.info("onMeasurementRequest({})", message); Thread.sleep(500); final ColorPoints colorPoints = new ColorPoints(colorLab(r.nextDouble() * 100, r.nextDouble() * 100, r.nextDouble() * 100), colorXYZ(r.nextDouble() * 100, r.nextDouble() * 100, r.nextDouble() * 100)); final MeasureWithPrecision<ColorTemperature> ccTemp = measureWithPrecision(kelvin(2000 + r.nextInt(6000)), r.nextDouble() * 10); final MeasureWithPrecision<ColorTemperature> planckianTemp = measureWithPrecision(kelvin(2000 + r.nextInt(6000)), r.nextDouble() * 10); final MeasureWithPrecision<ColorTemperature> daylightTemp = measureWithPrecision(kelvin(2000 + r.nextInt(6000)), r.nextDouble() * 10); new MeasurementMessage(colorPoints, ccTemp, planckianTemp, daylightTemp).send(); } }
/******************************************************************************************************************* * * Answers to the request for a measurement. * ******************************************************************************************************************/ @Nonnull private static MeasureWithPrecision<ColorTemperature> parseTemperature (final @Nonnull ConsoleOutput output, final @Nonnull String regexp) { final Scanner scanner = output.filteredAndSplitBy(regexp, "[ (K)]"); final int t = scanner.nextInt(); scanner.next(); // K scanner.next(); // blank scanner.next(); // Delta scanner.next(); // E final double de = scanner.nextDouble(); return measureWithPrecision(kelvin(t), de); } }
@Nonnull private static ColorTemperature randomTemperature (final @Nonnull Random r) { return kelvin(2000 + r.nextInt(6000)); }
/******************************************************************************************************************* * * ******************************************************************************************************************/ public void onNewMeasurement (final @ListensTo @Nonnull MeasurementMessage message) throws NotFoundException { log.info("onNewMeasurement({})", message); presentation.hideMeasureInProgress(); final XYZColorCoordinates xyzColor = message.getColorCoordinatesSet().find(XYZColorCoordinates.class); // http://www.freelists.org/post/argyllcms/Measuring-whitepoint-and-luminance-with-spotread,1 final UniformityMeasurement measurement = new UniformityMeasurement(message.getDaylightTemperature().getMeasure(), (int)xyzColor.getY()); measurementMapByPosition.put(currentPosition, measurement); presentation.renderMeasurementCellAt(currentPosition, String.format("Luminance: %d cd/m\u00b2", measurement.getLuminance()), String.format("White point: %d K", measurement.getTemperature().getValue())); eventuallyMoveBackControlPanel(); prepareNextMeasurement(message.getCollaboration()); }
@Nonnull public static UniformityMeasurements createMeasurements (final @Nonnull String displayName, final @Nonnull Random r) { final DateTime dateTime = new DateTime((40L * 365 * 24 * 60 * 60 + r.nextLong() % (365L * 24 * 60 * 60)) * 1000); final SortedMap<Position, UniformityMeasurement> m = new TreeMap<Position, UniformityMeasurement>(); m.put(xy(0, 0), new UniformityMeasurement(randomTemperature(r), randomLuminance(r))); m.put(xy(1, 0), new UniformityMeasurement(randomTemperature(r), randomLuminance(r))); m.put(xy(2, 0), new UniformityMeasurement(randomTemperature(r), randomLuminance(r))); m.put(xy(0, 1), new UniformityMeasurement(randomTemperature(r), randomLuminance(r))); m.put(xy(1, 1), new UniformityMeasurement(randomTemperature(r), randomLuminance(r))); m.put(xy(2, 1), new UniformityMeasurement(randomTemperature(r), randomLuminance(r))); m.put(xy(0, 2), new UniformityMeasurement(randomTemperature(r), randomLuminance(r))); m.put(xy(1, 2), new UniformityMeasurement(randomTemperature(r), randomLuminance(r))); m.put(xy(2, 2), new UniformityMeasurement(randomTemperature(r), randomLuminance(r))); return new UniformityMeasurements(new ProfiledDisplay(new Display(displayName, 0), new Profile("profile")), dateTime, m); }
final ColorCoordinates xyz = colorXYZ(measure.nextDouble(), measure.nextDouble(), measure.nextDouble()); final ColorCoordinates lab = colorLab(measure.nextDouble(), measure.nextDouble(), measure.nextDouble()); final ColorCoordinatesSet coordinatesSet = new ColorCoordinatesSet(lab, xyz); log.info("DayLight T: {}", daylightTemp); return new MeasurementMessage(coordinatesSet, ccTemp, planckianTemp, daylightTemp);
displays.add(new ProfiledDisplay(new Display(displayName, index), profile)); new DisplayDiscoveryMessage(new SimpleFinderSupport<ProfiledDisplay>() }).send();
/******************************************************************************************************************* * * ******************************************************************************************************************/ private void refreshPresentation() { if (selectedMeasurements != null) { propertyRenderers.get(selectedPropertyRendereIndex.getValue()).render(selectedMeasurements); presentation.renderDisplayName(selectedMeasurements.getDisplay().getDisplay().getDisplayName()); presentation.renderProfileName(selectedMeasurements.getDisplay().getProfile().getName()); } } }
/******************************************************************************************************************* * * ******************************************************************************************************************/ @Override public void showUp (final @Nonnull ProfiledDisplay profiledDisplay) { assert EventQueue.isDispatchThread(); panel.showUp(profiledDisplay); profiledDisplay.getDisplay().getGraphicsDevice().setFullScreenWindow(frame); frame.setVisible(true); }
/******************************************************************************************************************* * * ******************************************************************************************************************/ public void onDisplaySelection (final @ListensTo @Nonnull DisplaySelectionMessage message) { log.info("onDisplaySelection({})", message); selectedDisplay = message.getSelectedDisplay(); presentation.showWaitingOnMeasurementsArchive(); archivedMeasurementsRequestor.start(new UniformityArchiveQuery(selectedDisplay.getDisplay())); }
final ColorPoint xyz = colorXYZ(measure.nextDouble(), measure.nextDouble(), measure.nextDouble()); final ColorPoint lab = colorLab(measure.nextDouble(), measure.nextDouble(), measure.nextDouble()); final ColorPoints colorPoints = new ColorPoints(lab, xyz);
@Override protected double getValue (final @Nonnull UniformityMeasurement measurement) { return measurement.getTemperature().getValue(); } }
/******************************************************************************************************************* * * Answers to the request for a measurement. * ******************************************************************************************************************/ @Nonnull private static MeasureWithPrecision<ColorTemperature> parseTemperature (final @Nonnull ConsoleOutput output, final @Nonnull String regexp) { final Scanner scanner = output.filteredAndSplitBy(regexp, "[ (K)]"); final int t = scanner.nextInt(); scanner.next(); // K scanner.next(); // blank scanner.next(); // Delta scanner.next(); // E final double de = scanner.nextDouble(); return measureWithPrecision(kelvin(t), de); } }
@Nonnull private static ColorTemperature randomTemperature (final @Nonnull Random r) { return kelvin(2000 + r.nextInt(6000)); }
/******************************************************************************************************************* * * ******************************************************************************************************************/ public void onArchivedMeasurementsNotified (final @ListensTo @Nonnull UniformityArchiveContentMessage message) { log.info("onArchivedMeasurementsNotified({})", message); archivedMeasurementsRequestor.stop(); populateMeasurementsArchive(message.findMeasurements()); presentation.hideWaitingOnMeasurementsArchive(); presentation.renderDisplayName(selectedDisplay.getDisplay().getDisplayName()); presentation.renderProfileName(selectedDisplay.getProfile().getName()); }
/******************************************************************************************************************* * * ******************************************************************************************************************/ private void initializeMeasurement() { log.info("initializeMeasurement()"); presentation = presentationBuilder.get().getPresentation(); computePositions(); measurementMapByPosition.clear(); presentation.bind(continueAction, cancelAction); presentation.setGridSize(COLUMNS, ROWS); continueAction.setEnabled(false); cancelAction.setEnabled(false); presentation.showUp(display.getDisplay().getGraphicsDevice()); presentation.renderControlPanelAt(DEFAULT_CONTROL_PANEL_POSITION); }