import java.applet.Applet; import java.awt.*; import java.awt.event.*; import java.awt.image.MemoryImageSource; import java.awt.image.PixelGrabber; public class RedLeaves extends Applet implements ActionListener { int WIDTH, HEIGHT; Image imageInput,imageOutput; int[] pixelInput, pixelOutput; int selection; Button button1 = new Button("元の画像"); Button button2 = new Button("紅葉"); Panel panel = new Panel(); public void init(){ panel.add(button1); panel.add(button2); panel.setLayout(new GridLayout(1,2)); add(panel); selection = 0; button1.addActionListener(this); button2.addActionListener(this); loadImage("GREEN1.jpg"); int index = 0; int alpha; int Red; int Green; int Blue; float hsb[] = new float[3]; for (int y = 0; y < HEIGHT; y++) { for (int x = 0; x < WIDTH; x++) { alpha = (pixelInput[y * WIDTH + x] & 0xff000000); Red = (pixelInput[y * WIDTH + x] & 0x00ff0000)>>16; Green = (pixelInput[y * WIDTH + x] & 0x0000ff00)>>8; Blue = (pixelInput[y * WIDTH + x] & 0x000000ff); Color.RGBtoHSB (Red,Green,Blue,hsb); if( (hsb[0] <= 0.4) && (hsb[0] >= 0.1) ){ if (hsb[0]>=(1.0-0.88)){ hsb[0]= hsb[0]-(float)1.0;} pixelOutput[index++] =(alpha | Color.HSBtoRGB(hsb[0]+(float)0.88,hsb[1]+(float)0.2,hsb[2]));} else {pixelOutput[index++] = (alpha | Color.HSBtoRGB(hsb[0],hsb[1],hsb[2]));} } } imageOutput = createImage(new MemoryImageSource(WIDTH, HEIGHT, pixelOutput,0,WIDTH)); repaint(); } public void paint(Graphics g){ switch (selection) { case 0: g.drawImage(imageInput, 40,25,this); break; case 1: g.drawImage(imageOutput,40,25,this); break; } } public void loadImage(String s){ MediaTracker mt; imageInput = getImage(getDocumentBase(), s); mt = new MediaTracker(this); mt.addImage(imageInput,0); ) try { mt.waitForID(0); } catch (InterruptedException e){ return; } HEIGHT = imageInput.getHeight(this); WIDTH = imageInput.getWidth(this); pixelInput = new int[WIDTH * HEIGHT]; pixelOutput = new int[WIDTH * HEIGHT]; PixelGrabber pg = new PixelGrabber(imageInput,0,0,WIDTH,HEIGHT,pixelInput,0,WIDTH); try { pg.grabPixels(); } catch (InterruptedException e) { System.err.println("interrupted waiting for pixels!"); return; } } public void actionPerformed(ActionEvent e){ if(e.getActionCommand().equals("元の画像")){ selection = 0;} else if(e.getActionCommand().equals("紅葉")){ selection = 1;} repaint(); } }