package ij.plugin; import ij.*; //import ij.plugin.*; import ij.plugin.frame.*; import java.awt.*; import java.awt.event.*; import java.util.Vector; import ij.process.*; import ij.gui.*; /** Implements the Image/Color/Color Picker command. */ public class ColorPicker extends ImagePlus implements PlugIn { static int id; public void run(String arg) { ImagePlus imp = WindowManager.getImage(id); if (imp!=null && imp.getWindow()!=null) { imp.getWindow().toFront(); return; } int colorWidth = 22; int colorHeight = 16; int columns = 5; int rows = 20; int width = columns*colorWidth; int height = rows*colorHeight; ColorGenerator cg = new ColorGenerator(width, height, new int[width*height], this); cg.drawColors(colorWidth, colorHeight, columns, rows); setProcessor("CP", cg); id = getID(); show(); IJ.register(ColorPicker.class); } /** Overrides ImagePlus.show(). **/ public void show() { if (img==null && ip!=null) img = ip.createImage(); ImageWindow.centerNextImage(); win = new ImageWindow(this, new ColorCanvas(this)); draw(); IJ.showStatus(""); } } class ColorGenerator extends ColorProcessor { int w, h; ImagePlus imp; int[] colors = {0xff0000, 0x00ff00, 0x0000ff, 0xffffff, 0x00ffff, 0xff00ff, 0xffff00, 0x000000}; public ColorGenerator(int width, int height, int[] pixels, ImagePlus imp) { super(width, height, pixels); this.imp = imp; } void drawColors(int colorWidth, int colorHeight, int columns, int rows) { w = colorWidth; h = colorHeight; setColor(0xffffff); setRoi(0, 0, 110, 320); fill(); drawRamp(); resetBW(); flipper(); drawLine(0, 256, 110, 256); int x = 1; int y = 0; refreshBackground(); refreshForeground(); Color c; float hue, saturation=1f, brightness=1f; double w=colorWidth, h=colorHeight; for ( x=2; x<10; x++) { for ( y=0; y<32; y++) { hue = (float)(y/(2*h)-.15); if (x<6) { saturation = 1f; brightness = (float)(x*4/w); } else { saturation = 1f - ((float)((5-x)*-4/w)); brightness = 1f; } c = Color.getHSBColor(hue, saturation, brightness); setRoi(x*(int)(w/2), y*(int)(h/2), (int)w/2, (int)h/2); setColor(c); fill(); } } drawSpectrum(h); resetRoi(); } void drawColor(int x, int y, Color c) { setRoi(x*w, y*h, w, h); setColor(c); fill(); } public void refreshBackground() { //Boundary for Background Selection setColor(0x444444); drawRect((w*2)-12, 276, (w*2)+4, (h*2)+4); setColor(0x999999); drawRect((w*2)-11, 277, (w*2)+2, (h*2)+2); setRoi((w*2)-10, 278, w*2, h*2);//Paints the Background Color setColor(Toolbar.getBackgroundColor()); fill(); imp.updateAndDraw(); } public void refreshForeground() { //Boundary for Foreground Selection setColor(0x444444); drawRect(8, 266, (w*2)+4, (h*2)+4); setColor(0x999999); drawRect(9, 267, (w*2)+2, (h*2)+2); setRoi(10, 268, w*2, h*2); //Paints the Foreground Color setColor(Toolbar.getForegroundColor()); fill(); imp.updateAndDraw(); } void drawSpectrum(double h) { Color c; for ( int x=5; x<7; x++) { for ( int y=0; y<32; y++) { float hue = (float)(y/(2*h)-.15); c = Color.getHSBColor(hue, 1f, 1f); setRoi(x*(int)(w/2), y*(int)(h/2), (int)w/2, (int)h/2); setColor(c); fill(); } } setRoi(55, 32, 22, 16); //Solid red setColor(0xff0000); fill(); setRoi(55, 120, 22, 16); //Solid green setColor(0x00ff00); fill(); setRoi(55, 208, 22, 16); //Solid blue setColor(0x0000ff); fill(); setRoi(55, 80, 22, 8); //Solid yellow setColor(0xffff00); fill(); setRoi(55, 168, 22, 8); //Solid cyan setColor(0x00ffff); fill(); setRoi(55, 248, 22, 8); //Solid magenta setColor(0xff00ff); fill(); } void drawRamp() { int r,g,b; for (int x=0; x