@Nonnull private static ColorTemperature randomTemperature (final @Nonnull Random r) { return kelvin(2000 + r.nextInt(6000)); }
@Override protected double getValue (final @Nonnull UniformityMeasurement measurement) { return measurement.getTemperature().getValue(); } }
@Nonnull public static ColorTemperature kelvin (final @Nonnegative int value) { return new ColorTemperature(value, Scale.K); }
/******************************************************************************************************************* * * 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); } }
@Override public void marshal (final @Nonnull OutputStream os) throws IOException { final StringWriter sw = new StringWriter(); final PrintWriter pw = new PrintWriter(sw); final int rows = uniformityMeasurements.getRows(); final int columns = uniformityMeasurements.getColumns(); final DateTimeFormatter formatter = ISODateTimeFormat.dateTimeNoMillis(); pw.printf("%s ; D='%s' ; P='%s'", formatter.print(uniformityMeasurements.getDateTime()), uniformityMeasurements.getDisplay().getDisplay().getDisplayName(), uniformityMeasurements.getDisplay().getProfileName()); for (int row = 0; row < rows; row++) { for (int column = 0; column < columns; column++) { final UniformityMeasurement measurement = uniformityMeasurements.getAt(xy(column, row)); pw.printf(" ; L[%d,%d]=%3d", column, row, measurement.getLuminance()); pw.printf(" ; T[%d,%d]=%5d", column, row, measurement.getTemperature().getValue()); } } pw.println(); pw.close(); os.write(sw.toString().getBytes()); // FIXME: charset } }
/******************************************************************************************************************* * * 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(); } }
/******************************************************************************************************************* * * ******************************************************************************************************************/ 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()); }
/******************************************************************************************************************* * * 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(); } }
@Nonnull private static ColorTemperature randomTemperature (final @Nonnull Random r) { return kelvin(2000 + r.nextInt(6000)); }
/******************************************************************************************************************* * * 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); } }
final ColorTemperature temperature = kelvin(parseInt(temperatureMatcher.group(3))); map.put(xy, new UniformityMeasurement(temperature, luminance)); continue;
m.put(xy(0, 0), new UniformityMeasurement(kelvin(2568), 9)); m.put(xy(1, 0), new UniformityMeasurement(kelvin(5436), 79)); m.put(xy(2, 0), new UniformityMeasurement(kelvin(7916), 61)); m.put(xy(0, 1), new UniformityMeasurement(kelvin(4329), 0)); m.put(xy(1, 1), new UniformityMeasurement(kelvin(2111), 56)); m.put(xy(2, 1), new UniformityMeasurement(kelvin(2641), 52)); m.put(xy(0, 2), new UniformityMeasurement(kelvin(3015), 4)); m.put(xy(1, 2), new UniformityMeasurement(kelvin(6864), 20)); m.put(xy(2, 2), new UniformityMeasurement(kelvin(7209), 0)); final UniformityMeasurements measurements = new UniformityMeasurements(new ProfiledDisplay(new Display("display1", 0), new Profile("profile")), m); messageVerifier.verify(UniformityMeasurementMessage.class).with("measurements", new Equals(measurements));
m.put(xy(0, 0), new UniformityMeasurement(kelvin(2568), 9)); m.put(xy(1, 0), new UniformityMeasurement(kelvin(5436), 79)); m.put(xy(2, 0), new UniformityMeasurement(kelvin(7916), 61)); m.put(xy(0, 1), new UniformityMeasurement(kelvin(4329), 0)); m.put(xy(1, 1), new UniformityMeasurement(kelvin(2111), 56)); m.put(xy(2, 1), new UniformityMeasurement(kelvin(2641), 52)); m.put(xy(0, 2), new UniformityMeasurement(kelvin(3015), 4)); m.put(xy(1, 2), new UniformityMeasurement(kelvin(6864), 20)); m.put(xy(2, 2), new UniformityMeasurement(kelvin(7209), 0)); final UniformityMeasurements measurements = new UniformityMeasurements(new ProfiledDisplay(new Display("display1", 0), "profile"), m); messageVerifier.verify(UniformityMeasurementMessage.class).with("measurements", new Equals(measurements));