@Override public float[] getDefaultDecode(int bitsPerComponent) { int n = getNumberOfComponents(); float[] decode = new float[n * 2]; for (int i = 0; i < n; i++) { decode[i * 2] = awtColorSpace.getMinValue(i); decode[i * 2 + 1] = awtColorSpace.getMaxValue(i); } return decode; }
@Override public Point getColorLocation(float[] components) { float radial = (components[radialIndex] - colorSpace.getMinValue(radialIndex))// / (colorSpace.getMaxValue(radialIndex) - colorSpace.getMinValue(radialIndex)); float angular = (components[angularIndex] - colorSpace.getMinValue(angularIndex))// / (colorSpace.getMaxValue(angularIndex) - colorSpace.getMinValue(angularIndex)); float radius = Math.min(w, h) / 2f; radial = Math.max(0f, Math.min(1f, radial)); Point p = new Point( w / 2 + (int) (radius * radial * Math.cos(angular * Math.PI * 2d)), h / 2 - (int) (radius * radial * Math.sin(angular * Math.PI * 2d))); return p; }
@Override public Point getColorLocation(float[] components) { float radial = (components[radialIndex] - colorSpace.getMinValue(radialIndex))// / (colorSpace.getMaxValue(radialIndex) - colorSpace.getMinValue(radialIndex)); float angular = (components[angularIndex] - colorSpace.getMinValue(angularIndex))// / (colorSpace.getMaxValue(angularIndex) - colorSpace.getMinValue(angularIndex)); float radius = Math.min(w, h) / 2f; radial = Math.max(0f, Math.min(1f, radial)); Point p = new Point( w / 2 + (int) (radius * radial * Math.cos(angular * Math.PI * 2d)), h / 2 - (int) (radius * radial * Math.sin(angular * Math.PI * 2d))); return p; }
@Override public Point getColorLocation(float[] components) { float radial = (components[radialIndex] - colorSpace.getMinValue(radialIndex))// / (colorSpace.getMaxValue(radialIndex) - colorSpace.getMinValue(radialIndex)); float angular = (components[angularIndex] - colorSpace.getMinValue(angularIndex))// / (colorSpace.getMaxValue(angularIndex) - colorSpace.getMinValue(angularIndex)); if (flipX) radial=1f-radial; if (!flipY) angular=1f-angular; float angle=(float)Math.atan2(radial-0.5f,angular-0.5f); float scale=(float)Math.max(Math.abs(Math.sin(angle)),Math.abs(Math.cos(angle)))+0.01f; int side = Math.min(w - 1, h - 1); // side length Point p = new Point( (int) (side * (radial-0.5f)*scale) + w/2, (int) (side*(angular-0.5f)*scale) + h/2// ); return p; }
@Override public float[] getDefaultDecode(int bitsPerComponent) { int n = getNumberOfComponents(); float[] decode = new float[n * 2]; for (int i = 0; i < n; i++) { decode[i * 2] = awtColorSpace.getMinValue(i); decode[i * 2 + 1] = awtColorSpace.getMaxValue(i); } return decode; }
@Override public float[] getDefaultDecode(int bitsPerComponent) { int n = getNumberOfComponents(); float[] decode = new float[n * 2]; for (int i = 0; i < n; i++) { decode[i * 2] = awtColorSpace.getMinValue(i); decode[i * 2 + 1] = awtColorSpace.getMaxValue(i); } return decode; }
@Override public Point getColorLocation(float[] components) { float radial = (components[radialIndex] - colorSpace.getMinValue(radialIndex))// / (colorSpace.getMaxValue(radialIndex) - colorSpace.getMinValue(radialIndex)); float angular = (components[angularIndex] - colorSpace.getMinValue(angularIndex))// / (colorSpace.getMaxValue(angularIndex) - colorSpace.getMinValue(angularIndex)); if (flipX) radial=1f-radial; if (flipY) angular=1f-angular; int side = Math.min(w - 1, h - 1); // side length int xOffset = (w - side) / 2; int yOffset = (h - side) / 2; Point p = new Point( (int) (side * radial) + xOffset, (int) (side * angular) + yOffset// ); return p; }
@Override public float[] getColorAt(int x, int y) { int side = Math.min(w - 1, h - 1); // side length int xOffset = (w - side) / 2; int yOffset = (h - side) / 2; float radial = (x - xOffset) / (float) side; float angular = (y - yOffset) / (float) side; if (flipX) radial=1f-radial; if (flipY) angular=1f-angular; float[] hsb = new float[3]; hsb[angularIndex] = angular// * (colorSpace.getMaxValue(angularIndex) - colorSpace.getMinValue(angularIndex))// + colorSpace.getMinValue(angularIndex); hsb[radialIndex] = radial// * (colorSpace.getMaxValue(radialIndex) - colorSpace.getMinValue(radialIndex))// + colorSpace.getMinValue(radialIndex); hsb[verticalIndex] = verticalValue; return hsb; } }
@Override public float[] getColorAt(int x, int y) { int side = Math.min(w - 1, h - 1); // side length int xOffset = (w - side) / 2; int yOffset = (h - side) / 2; float radial = (x - xOffset) / (float) side; float angular = (y - yOffset) / (float) side; if (flipX) radial=1f-radial; if (!flipY) angular=1f-angular; float[] hsb = new float[3]; hsb[angularIndex] = angular// * (colorSpace.getMaxValue(angularIndex) - colorSpace.getMinValue(angularIndex))// + colorSpace.getMinValue(angularIndex); hsb[radialIndex] = radial// * (colorSpace.getMaxValue(radialIndex) - colorSpace.getMinValue(radialIndex))// + colorSpace.getMinValue(radialIndex); hsb[verticalIndex] = verticalValue; return hsb; } }
@Override public float[] getColorAt(int x, int y) { x -= w / 2; y -= h / 2; float r = (float) Math.sqrt(x * x + y * y); float theta = (float) Math.atan2(y, -x); float angular = (float) (0.5 + (theta / Math.PI / 2d)); float radial=Math.min(1f, (float) r / getRadius()); float[] hsb = new float[3]; hsb[angularIndex] = angular// * (colorSpace.getMaxValue(angularIndex) - colorSpace.getMinValue(angularIndex))// + colorSpace.getMinValue(angularIndex); hsb[radialIndex] = radial// * (colorSpace.getMaxValue(radialIndex) - colorSpace.getMinValue(radialIndex))// + colorSpace.getMinValue(radialIndex); hsb[verticalIndex] = verticalValue; return hsb; } }
@Override public float[] getColorAt(int x, int y) { x -= w / 2; y -= h / 2; float r = (float) Math.sqrt(x * x + y * y); float theta = (float) Math.atan2(y, -x); float angular = (float) (0.5 + (theta / Math.PI / 2d)); float radial=Math.min(1f, (float) r / getRadius()); float[] hsb = new float[3]; hsb[angularIndex] = angular// * (colorSpace.getMaxValue(angularIndex) - colorSpace.getMinValue(angularIndex))// + colorSpace.getMinValue(angularIndex); hsb[radialIndex] = radial// * (colorSpace.getMaxValue(radialIndex) - colorSpace.getMinValue(radialIndex))// + colorSpace.getMinValue(radialIndex); hsb[verticalIndex] = verticalValue; return hsb; } }
private void generateHorizontalColorTrack() { float[] components = colorizer.getComponents(); ColorSpace cs = colorizer.getColorSpace(); int offset = trackBuffer / 2; float minv = cs.getMinValue(componentIndex); float maxv = cs.getMaxValue(componentIndex); for (int x = 0, n = w - trackBuffer - 1; x <= n; x++) { components[componentIndex] = (x / (float) n)*(maxv-minv)+minv; pixels[x + offset] = ColorUtil.toRGB(cs,components); } for (int x=0; x < offset; x++) { pixels[x] = pixels[offset]; pixels[w - x - 1] = pixels[w - offset - 1]; } for (int y=w, n = w*h; y < n; y+=w) { System.arraycopy(pixels, 0, pixels, y, w); } } private void generateVerticalColorTrack() {
@Override public void setColorSpace(ColorSpace newValue) { ColorSpace oldValue = colorSpace; colorSpace = newValue; componentModels = new DefaultBoundedRangeModel[colorSpace.getNumComponents()]; for (int i = 0; i < componentModels.length; i++) { componentModels[i] = new DefaultBoundedRangeModel(); if ((colorSpace.getMaxValue(i)-colorSpace.getMinValue(i))>=10f) { componentModels[i].setMinimum((int)colorSpace.getMinValue(i)); componentModels[i].setMaximum((int)colorSpace.getMaxValue(i)); } else { componentModels[i].setMinimum((int)(colorSpace.getMinValue(i)*100f)); componentModels[i].setMaximum((int)(colorSpace.getMaxValue(i)*100f)); } final int componentIndex = i; componentModels[i].addChangeListener( new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { fireColorChanged(componentIndex); fireStateChanged(); } }); } }
@Override public Color getColor() { float[] c = new float[getComponentCount()]; int i = 0; for (DefaultBoundedRangeModel brm : componentModels) { c[i] = (brm.getValue() - brm.getMinimum()) / (float) (brm.getMaximum() - brm.getMinimum()) * (colorSpace.getMaxValue(i) - colorSpace.getMinValue(i)) + colorSpace.getMinValue(i); i++; } try { return ColorUtil.toColor(colorSpace, c); } catch (IllegalArgumentException e) { for (i = 0; i < c.length; i++) { System.err.println(i + "=" + c[i]+" "+colorSpace.getMinValue(i)+".."+colorSpace.getMaxValue(i)); } throw e; } }
private void generateVerticalColorTrack() { float[] components = colorizer.getComponents(); ColorSpace cs = colorizer.getColorSpace(); int offset = trackBuffer / 2; float minv = cs.getMinValue(componentIndex); float maxv = cs.getMaxValue(componentIndex); for (int y = 0, n = h - trackBuffer - 1; y <= n; y++) { // Note: removed + minv - minv from formula below components[componentIndex] = maxv - (y / (float) n)*(maxv-minv); pixels[(y + offset) * w] = ColorUtil.toRGB(cs,components); } for (int y=0; y < offset; y++) { pixels[y * w] = pixels[offset * w]; pixels[(h - y - 1) * w] = pixels[(h - offset - 1) * w]; } for (int x=1; x < w; x++) { for (int y=0, n = w*h; y < n; y+=w) { pixels[x + y] = pixels[x - 1 + y]; } } }
@Override public float getComponent(int i) { BoundedRangeModel brm = componentModels[i]; return (brm.getValue() - brm.getMinimum()) // / (float) (brm.getMaximum() - brm.getMinimum())// * (colorSpace.getMaxValue(i) - colorSpace.getMinValue(i))// + colorSpace.getMinValue(i); }
@Override public void setComponent(int i, float newValue) { BoundedRangeModel brm = componentModels[i]; brm.setValue((int) (((newValue - colorSpace.getMinValue(i))// / (colorSpace.getMaxValue(i) - colorSpace.getMinValue(i)))// * (brm.getMaximum() - brm.getMinimum())) + brm.getMinimum()); }
@Override public void setColor(Color newValue) { float[] c = ColorUtil.fromColor(colorSpace, newValue); int i = 0; for (DefaultBoundedRangeModel brm : componentModels) { brm.setValue(// (int) (((c[i] - colorSpace.getMinValue(i))// / (colorSpace.getMaxValue(i) - colorSpace.getMinValue(i))) // * (brm.getMaximum() - brm.getMinimum()) + brm.getMinimum())); i++; } }
@Override public float[] getComponents() { float[] c = new float[getComponentCount()]; for (int i = 0; i < c.length; i++) { BoundedRangeModel brm = componentModels[i]; c[i] = (brm.getValue() - brm.getMinimum()) // / (float) (brm.getMaximum() - brm.getMinimum())// * (colorSpace.getMaxValue(i) - colorSpace.getMinValue(i))// + colorSpace.getMinValue(i); } return c; } }
@Override public int getInterpolatedRGB(int i, float componentValue) { float[] c = new float[getComponentCount()]; int j = 0; for (DefaultBoundedRangeModel brm : componentModels) { c[j] = ((brm.getValue() - brm.getMinimum()) / (float) (brm.getMaximum() - brm.getMinimum())) * (colorSpace.getMaxValue(j) - colorSpace.getMinValue(j)) + colorSpace.getMinValue(j); j++; } c[i] = componentValue; return ColorUtil.toRGB(colorSpace, c); }