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);
}
}
|
 |  |
|