Hem E-böcker Specialeffekter och spelutveckling i Java Appleten GrayImaget

Specialeffekter och spelutveckling i Java(TM) - Appleten GrayImage

import java.applet.*;
import java.awt.*;
import java.awt.image.*;

public class grayimage extends Applet {

//"blueimage" kommer att hålla reda på
//bilden som vi skapar.
Image image=null;

public void init()
{
    //Ladda in bilden (filnamnet finns i
    //parametern "image").
    MediaTracker tracker=new MediaTracker(this);
    image=getImage(getDocumentBase(),getParameter("image"));
    tracker.addImage(image,0);
    try {tracker.waitForAll();}
    catch(InterruptedException e){}

    //Nu anropar vi metoden grayImage()
    //för att göra om bilden till en gråskala.
    image=grayImage(image);
}

public Image grayImage(Image img)
{
    //Skapa en array för att lagra bildens pixlar.
    Dimension d=new Dimension(img.getWidth(this),img.getHeight(this));
    int pixels[]=new int[d.width*d.height];

    //Lagra pixlarna i arrayen med hjälp av PixelGrabber-
    //klassen.
    PixelGrabber grabber
        =new PixelGrabber(img,0,0,d.width,d.height,pixels,0,d.width);
    try {grabber.grabPixels();} catch(InterruptedException e){};

    int r,g,b,alfa,mv;

    //For-slingan går igenom hela arrayen
    //och gör om alla färgvärden till grå-skalor.
    //Observera att här använder vi en enda for-slinga, ty
    //den här effekten är inte beroende av x- eller y positionen
    //av den pixel man beräknar.
    for (int index=0; index < d.width*d.height; index++)
    {
        //Först tar vi fram varje komponent så att
        //vi kan arbeta med dem.
        alfa=pixels[index]&0xff000000;
        r=(pixels[index]&0xff0000)>>16;
        g=(pixels[index]&0xff00)>>8;
        b=pixels[index]&0xff;

        //Nu räknar vi ut gråmedelvärdet.
        mv=(3*r+4*g+2*b)/9;

        //Till sist så bygger vi upp pixelvärdet igen.
        pixels[index]=alfa+(mv < < 16)+(mv < < 8)+mv;
    }
    //Nur återstår bara att återskapa bilden och returnera den.
    MemoryImageSource imgsrc=new MemoryImageSource(d.width,d.height,pixels,0,d.width);
    img=createImage(imgsrc);
    return img;
}

public void paint(Graphics g)
{
    if (image!=null) g.drawImage(image,0,0,this);
}

}