[Bluej-discuss] Chapter 11 - Imageviewer Smooth Filter

Cecilia Vargas C.A.Vargas at kent.ac.uk
Thu Jul 19 21:01:23 BST 2007


Hello Mark,

The bluej-discuss list is *not* for textbook questions. There is another 
list for that. See http://www.bluej.org/objects-first/discussion.html

Cecilia

Mark Wallsgrove wrote:
> Afternoon everyone,
>
> I am just reading through chapter 11 on page 343 and I have become stuck on
> a task. The idea is to create a smooth filter for an image. My filter
> doesn't smooth lol.. I have programmed what they asked for, get the average
> of 9 pixels and set the middle pixel to that average. This creates a very
> distasteful image.
>
> Here is my code for the filter:
>
> [CODE]
> import java.awt.Color;
> import java.util.ArrayList;
> /**
>  * Write a description of class SmoothFilter here.
>  * 
>  * @author (your name) 
>  * @version (a version number or a date)
>  */
> public class SmoothFilter extends Filter
> {
>     /**
>      * Constructor for objects of class SmoothFilter
>      */
>     public SmoothFilter(String name)
>     {
>         super(name);
>     }
>
>     /**
>      * Apply this filter to an image
>      * @param image The image to apply the filter to
>      */
>     public OFImage apply(OFImage image){
>         //Create new image
>         OFImage newImage = new OFImage(image);
>         //Get height and width
>         int w = image.getWidth();
>         int h = image.getHeight();
>         //Loops
>         for(int y = 0; y < h; y++){
>             for(int x = 0; x < w; x++){
>                 newImage.setPixel(x, y, getNewPixel(image, x, y));
>
>             }
>         }
>         return newImage;
>     }
>     /**
>      * return the modified pixel
>      * @param image Image to take a sample from
>      * @return the new pixel
>      */
>     private Color getNewPixel(OFImage image, int x, int y){
>         //Create new list
>         int averagePix = 0;
>         int counter = 0;
>         for(int cy = 0; cy < 3; cy++){
>             for(int cx = 0; cx < 3; cx++){
>                 if(((x-1)+cx > -1) && ((x-1)+cx < image.getWidth())){
>                     if(((y-1)+cy > -1) && ((y-1)+cy < image.getHeight())){
>                         averagePix +=
> image.getPixel(x-1+cx,y-1+cy).getRGB(); 
>                         counter++;
>                         //System.out.println("Coords: "+  (y-1+cy) +" :: y=
> "+ y +" cy= "+ cy +" \n "+ (x-1+cx));
>                         //System.exit(0);
>                     }
>                 }
>             }
>         }
>         return (new Color(averagePix / counter));
>     }
> }
> [/CODE]
>
>
> Could anyone else give me a clue for what I am meant to be programming..
> ie.. whats the sudo code. I think I might have got the wrong idea. The txt
> for that question isn't worded correctly I don't think.
>
> Thanks for any help given..
> All the best
> Mark
>
> _______________________________________________
> mailing list bluej-discuss at bluej.org
> To unsubscribe or change your preferences, go to
> http://lists.bluej.org/mailman/listinfo/bluej-discuss
>   


More information about the bluej-discuss mailing list