package examples.colorpicker2;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.MemoryImageSource;
import java.awt.image.PixelGrabber;
public class CanvasB extends Canvas{
static final int HEIGHT = 256;
static final int WIDTH = 30;
private int[] colormap = new int[WIDTH*HEIGHT];
private Image col_img = null;
private Point cur_point = new Point();
CanvasB(){
super.setBackground(Color.white);
super.resize(WIDTH + 10, HEIGHT);
for (int x = 0; x < WIDTH; x++){
for (int y = 1; y <= HEIGHT; y++){
colormap[x + (HEIGHT - y)*WIDTH] = Color.HSBtoRGB((float) 0.0, (float) 0.0, ((float) y)/HEIGHT);
}
}
col_img = createImage(new MemoryImageSource(WIDTH, HEIGHT, colormap, 0, WIDTH));
mouseY = HEIGHT/2;
}
public void refresh(Color col){
for (int x = 0; x < WIDTH; x++){
for (int y = 1; y <= HEIGHT/2; y++){
colormap[x + y * WIDTH] = 0xFF << 24 | (y*2*(col.getRed() - 255)/HEIGHT + 255) << 16 | (y*2*(col.getGreen() - 255)/HEIGHT + 255) << 8 | (y*2*(col.getBlue() - 255)/HEIGHT + 255);
}
}
for (int x = 0; x < WIDTH; x++){
for (int y = HEIGHT/2; y < HEIGHT; y++){
colormap[x + y * WIDTH] = 0xFF << 24 | (col.getRed()*2*(HEIGHT-y)/HEIGHT) << 16 | (col.getGreen()*2*(HEIGHT-y)/HEIGHT) << 8 | (col.getBlue()*2*(HEIGHT-y)/HEIGHT);
}
}
col_img = createImage(new MemoryImageSource(WIDTH, HEIGHT, colormap, 0, WIDTH));
repaint();
}
int mouseY = 0;
int prevY = 0;
public void setCursor(int y){
prevY = mouseY;
mouseY = y;
}
public Color getColorAt(int x, int y){
Color couleur = new Color(colormap[x + y*WIDTH]);
return couleur;
}
public Color getColor(){
Color couleur = new Color(colormap[mouseY*WIDTH]);
return couleur;
}
public boolean mouseDrag( Event evt, int x, int y ){
/*Color cur_color = cb.getColorAt(e.getX(), e.getY());
tf_r.setText(Integer.toString(cur_color.getRed()));
tf_g.setText(Integer.toString(cur_color.getGreen()));
tf_b.setText(Integer.toString(cur_color.getBlue()));
tf_hc.setText(Integer.toHexString(cur_color.getRGB() & 0xFFFFFF).toUpperCase());
cb.setCursor(e.getY());
cb.repaint();
cc.setBackground(cur_color);*/
System.out.println(evt.y);
return true;
}
public void paint(Graphics g){
int[] p_x = {0, 5, 0};
int[] p_y = {mouseY - 5, mouseY, mouseY + 5};
g.setColor(Color.black);
g.fillPolygon(p_x, p_y, 3);
p_x[0] = size().width - p_x[0];
p_x[1] = size().width - p_x[1];
p_x[2] = size().width - p_x[2];
g.fillPolygon(p_x, p_y, 3);
g.drawImage(col_img, 5, 0, this);
}
public void update(Graphics g){
//g.clearRect(0, Math.max(0, prevY - 5), 5, Math.max(5, prevY + 5));
//g.clearRect(size().width - 5, Math.max(0, prevY - 5), size().width, Math.max(5, prevY + 5));
g.clearRect(0, 0, 5, size().height);
g.clearRect(size().width - 5, 0, size().width, size().height);
paint(g);
}
}