/***********************************************************************
* ColorBrowserApplet.java - Source Code (requires java 1.1) *
* Version release date : January 20, 2001 *
* Copyright (C) 2000-2001 Neural Semantics sprl, Belgium *
* Author : Michel Petre mpetre@neuralsemantics.com *
* *
* http://www.neuralsemantics.com/ *
* *
* This code is released under GNU GPL license, version 2 or later. *
* *
* This notice must remain intact in all copies of this code. *
* This code is distributed WITHOUT ANY WARRANTY OF ANY KIND. *
* The GNU GPL license can be found at : *
* http://www.gnu.org/copyleft/gpl.html *
* *
* Feel free to use any portion of this code for your best purposes. *
***********************************************************************/
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.PixelGrabber;
public class ColorBrowserApplet extends Applet
implements Runnable, MouseListener {
// Line separator char
final static String lsep = System.getProperty("line.separator");
// Default background color
Color bgcolor = Color.lightGray;
// Currently selected pixel color
Color pixColor;
Dimension dim;
Image img, image;
Graphics graph;
Canvas canvas;
TextField fieldColor, fieldRGB, fieldHex;
// Image display thread
Thread runner;
//**********************************************************************
// Constructors
//**********************************************************************
public ColorBrowserApplet() { }
//**********************************************************************
// Methods
//**********************************************************************
public void init() {
String s = getParameter("image");
Image im = null;
if (s != null)
im = getImage(getDocumentBase(), getParameter("image"));
if (im != null)
this.loadImage(im);
this.compose();
repaint();
}
//------------------------------------------------------------------------
public void compose() {
fieldColor = new TextField(4);
fieldColor.setEditable(false);
fieldColor.setBackground(Color.lightGray);
fieldColor.setFont(new Font("Dialog", Font.PLAIN, 18));
fieldRGB = new TextField(16);
fieldRGB.setEditable(false);
fieldRGB.setBackground(Color.lightGray);
fieldHex = new TextField(10);
fieldHex.setEditable(false);
fieldHex.setBackground(Color.lightGray);
Panel control = new Panel();
control.setLayout(new FlowLayout(FlowLayout.CENTER, 30, 10));
control.setBackground(Color.darkGray);
control.add(fieldColor);
control.add(fieldRGB);
control.add(fieldHex);
canvas = new Canvas();
canvas.addMouseListener(this);
setLayout(new BorderLayout());
add("Center", canvas);
add("South", control);
}
//------------------------------------------------------------------------
public boolean loadImage(Image im) {
MediaTracker tracker = new MediaTracker(this);
try {
tracker.addImage(im, 0);
tracker.waitForID(0);
if ((im.getWidth(this) <= 0) || (im.getHeight(this) <= 0))
return false;
img = im;
image = null;
return true;
}
catch (Exception e) { }
return false;
}
//------------------------------------------------------------------------
private Color getPixelColor(Image im, int x, int y) {
// returns a Color object from pixel(x,y)
int[] pix = new int[1];
PixelGrabber pg = new PixelGrabber(im, x, y, 1, 1, pix, 0, 0);
try {
pg.grabPixels();
}
catch (InterruptedException e) { }
return new Color((pix[0]>>16)&0xff, (pix[0]>>8)&0xff, (pix[0])&0xff);
}
//**********************************************************************
// Thread
//**********************************************************************
public void start() {
// create thread
if (runner == null) {
runner = new Thread(this);
runner.start();
}
}
//------------------------------------------------------------------------
public void run() {
// infinite loop
while (true) {
repaint();
// let the computer breath
try { Thread.sleep(200); }
catch (InterruptedException e) { }
}
}
//------------------------------------------------------------------------
public void stop() {
this.cleanup();
}
//------------------------------------------------------------------------
public void destroy() {
this.cleanup();
}
//------------------------------------------------------------------------
private synchronized void cleanup() {
// kill the runner thread
if (runner != null) {
try {
runner.stop();
runner.join();
runner = null;
}
catch(Exception e) { }
}
}
//**********************************************************************
// MouseListener Interface
//**********************************************************************
public void mouseClicked(MouseEvent e) {
}
//----------------------------------------------------------------------
public void mouseEntered(MouseEvent e) {
}
//----------------------------------------------------------------------
public void mouseExited(MouseEvent e) {
}
//----------------------------------------------------------------------
public void mousePressed(MouseEvent e) {
Object source = e.getSource();
if (image != null) {
pixColor = this.getPixelColor(image, (int)e.getX(), (int)e.getY());
int r = pixColor.getRed();
int g = pixColor.getGreen();
int b = pixColor.getBlue();
fieldColor.setBackground(pixColor);
fieldRGB.setText("RGB = (" + r + ":" + g + ":" + b + ")");
String sHex = Integer.toHexString(pixColor.getRGB()).toUpperCase();
if (sHex.length() > 6)
sHex = sHex.substring(sHex.length() - 6);
if (sHex.length() < 6) {
String sZero = "000000";
sHex = sZero.substring(6 - sHex.length()) + sHex;
}
fieldHex.setText("#" + sHex);
}
repaint();
e.consume();
}
//----------------------------------------------------------------------
public void mouseReleased(MouseEvent e) {
}
//**********************************************************************
// Painting
//**********************************************************************
public void paint(Graphics g) {
Graphics canvasGraph = canvas.getGraphics();
Dimension d = canvas.getSize();
if ((d.width > 0) & (d.height > 0)) {
if (img == null) {
canvasGraph.setColor(bgcolor);
canvasGraph.fillRect(0, 0, d.width, d.height);
return;
}
if (image == null || d.width != dim.width || d.height != dim.height) {
image = createImage(d.width, d.height);
graph = image.getGraphics();
graph.drawImage(img, 0, 0, d.width, d.height, bgcolor, null);
dim = d;
}
// canvas painting
if (canvasGraph != null) {
canvasGraph.drawImage(image, 0, 0, d.width, d.height, bgcolor, this);
canvasGraph.dispose();
}
}
}
//**********************************************************************
// Applet info
//**********************************************************************
public String getAppletInfo(){
String s = "Quick Color Browser" + lsep + lsep +
"A simple color viewer" + lsep +
"Copyright (c) Neural Semantics, 2001" + lsep + lsep +
"Home page : http://www.neuralsemantics.com/";
return s;
}
}
|