codice:
GridBagLayout gridbag;
GridBagConstraints c;
int y = 0;
JPanel panel, tPanel;
Scrollbar minSlider, maxSlider, contrastSlider, brightnessSlider;
int sliderRange = 256;
double min, max;
double previousMin, previousMax;
double defaultMin, defaultMax;
int previousImageID;
int previousType;
int previousSlice = 1;
Object previousSnapshot;
int contrast, brightness;
boolean RGBImage;
int channels = 7; // RGB
Choice choice;
int autoThreshold;
static final int MIN=5, MAX=6, BRIGHTNESS=7, CONTRAST=8;
int minSliderValue=-1, maxSliderValue=-1, brightnessValue=-1, contrastValue=-1;
Thread thread;
/**
* Creates new form ContrastBrightness
*/
public ContrastBrightness() {
initComponents();
//layout
gridbag = new GridBagLayout();
c = new GridBagConstraints();
setLayout(gridbag);
// min slider
minSlider = new Scrollbar(Scrollbar.HORIZONTAL, sliderRange/2, 1, 0, sliderRange);
c.gridy = y++;
// c.insets = new Insets(2, 10, 0, 10);
gridbag.setConstraints(minSlider, c);
add(minSlider);
minSlider.addAdjustmentListener(this);
minSlider.setUnitIncrement(1);
minSlider.setFocusable(false); // prevents blinking on Windows
// max slider
maxSlider = new Scrollbar(Scrollbar.HORIZONTAL, sliderRange/2, 1, 0, sliderRange);
c.gridy = y++;
// c.insets = new Insets(2, 10, 0, 10);
gridbag.setConstraints(maxSlider, c);
add(maxSlider);
maxSlider.addAdjustmentListener(this);
maxSlider.setUnitIncrement(1);
maxSlider.setFocusable(false);
// brightness slider
brightnessSlider = new Scrollbar(Scrollbar.HORIZONTAL, sliderRange/2, 1, 0, sliderRange);
c.gridy = y++;
//c.insets = new Insets(5, 10, 0, 10);
gridbag.setConstraints(brightnessSlider, c);
add(brightnessSlider);
brightnessSlider.addAdjustmentListener(this);
brightnessSlider.setUnitIncrement(1);
brightnessSlider.setFocusable(false);
// contrast slider
contrastSlider = new Scrollbar(Scrollbar.HORIZONTAL, sliderRange/2, 1, 0, sliderRange);
c.gridy = y++;
// c.insets = new Insets(5, 10, 0, 10);
gridbag.setConstraints(contrastSlider, c);
add(contrastSlider);
contrastSlider.addAdjustmentListener(this);
contrastSlider.setUnitIncrement(1);
contrastSlider.setFocusable(false);
thread = new Thread(this, "ContrastAdjuster");
//thread.setPriority(thread.getPriority()-1);
thread.start();
setup();
}
public void run() {
System.out.println("Contrast run");
while(true){
synchronized(this) {
try {wait();}
catch(InterruptedException e) {}
}
doUpdate();
}
}
public synchronized void adjustmentValueChanged(AdjustmentEvent e) {
//controlla ci sia finestra!!!!!!!!!!!!!!!!!
//verifico quale slider ho spostato
Object source = e.getSource();
if (source==minSlider) {
System.out.println("--------------------------------------Contrast minSlider");
minSliderValue = minSlider.getValue();}
else if (source==maxSlider){
System.out.println("--------------------------------------Contrast maxSlider");
maxSliderValue = maxSlider.getValue();}
else if (source==contrastSlider){
System.out.println("--------------------------------------Contrast contrastSlider");
contrastValue = contrastSlider.getValue();}
else if (source==brightnessSlider){
brightnessValue = brightnessSlider.getValue();
System.out.println("--------------------------------------Contrast brightnessSlider");
System.out.println("-*****************----"+brightnessValue);
}
notify();
}
void doUpdate() { System.out.println("Contrast DOUPDATE");
MyImagePlus imp;
ImageProcessor ip;
int action;
int minvalue = minSliderValue;
int maxvalue = maxSliderValue;
int bvalue = brightnessValue;
int cvalue = contrastValue;
if (minSliderValue>=0) action = MIN;
else if (maxSliderValue>=0) action = MAX;
else if (brightnessValue>=0) action = BRIGHTNESS;
else if (contrastValue>=0) action = CONTRAST;
else return;
minSliderValue = maxSliderValue = brightnessValue = contrastValue = -1;
imp = WindowManagerCCD.getCurrentWindow().getCanvas().getImage();
if (imp==null) {
System.out.println("No image");
return;
}
ip = setup(imp);
System.out.println("ip"+ip);
if (RGBImage && !imp.lock())
{imp=null; return;}
switch (action) {
case MIN: adjustMin(imp, ip, minvalue); break;
case MAX: adjustMax(imp, ip, maxvalue); break;
case BRIGHTNESS: adjustBrightness(imp, ip, bvalue); break;
case CONTRAST: adjustContrast(imp, ip, cvalue); break;
}
updatePlot();
updateLabels(imp);
imp.updateChannelAndDraw();
if (RGBImage)
imp.unlock();
}
void updateScrollBars(String sb, boolean newRange) {
if ((sb==null) || (!sb.equals("contrastSlider"))) {
double mid = sliderRange/2;
double c = ((defaultMax-defaultMin)/(max-min))*mid;
if (c>mid)
c = sliderRange - ((max-min)/(defaultMax-defaultMin))*mid;
contrast = (int)c;
if (contrastSlider!=null) {
if (newRange)
contrastSlider.setValues(contrast, 1, 0, sliderRange);
else
contrastSlider.setValue(contrast);
}
}
if ((sb==null) || (!sb.equals("brightnessSlider"))) {
double level = min + (max-min)/2.0;
double normalizedLevel = 1.0 - (level - defaultMin)/(defaultMax-defaultMin);
brightness = (int)(normalizedLevel*sliderRange);
if (newRange)
brightnessSlider.setValues(brightness, 1, 0, sliderRange);
else
brightnessSlider.setValue(brightness);
}
if ((!minSlider.equals(null)) && ((sb==null) ||(!sb.equals("minSlider")))){
if (newRange)
minSlider.setValues(scaleDown(min), 1, 0, sliderRange);
else
minSlider.setValue(scaleDown(min));
}
if ((!maxSlider.equals(null)) && ((sb==null) || (!sb.equals("maxSlider")))){
if (newRange)
maxSlider.setValues(scaleDown(max), 1, 0, sliderRange);
else
maxSlider.setValue(scaleDown(max));
}
}