Uppgift3e

Algoritmen kan sedan återanvändas till ett kontrastsänkande grå- filter enbart genom att ändra på de tre rader som ändrar bildens pixelvärden. Detta är principen för ett sådant filter:
    compo[0] /= 2;
    compo[1] /= 2;
    compo[2] /= 2;

För att resultatet inte ska bli alltför jämngrått så lättar vi sedan upp bilden lite med:
    compo[0] += 60;
    compo[1] += 60;
    compo[2] += 60;

Våra egendefinierade filterklasser behöver dock ytterligare två saker:

  1. Ett inledande metodanrop till setHints() som ursprungligen kommer från interfacet java.awt.image.ImageConsumer
    public void setHints(int hint){
       hint |= ImageConsumer.TOPDOWNLEFTRIGHT;
       super.setHints(hint);
    }
    Genom detta så försäkrar vi oss om att pixelbearbetningen alltid kommer att ske i rätt ordning med början i det övre högre hörnet.

  2. Ett avslutande anrop till basklassens setPixels():
    super.setPixels(x, y, width, height, model,
                        pixie, offset, scansize);

Förutom själva filtret så räcker det annars i Java med följande delsteg för bildbehandlingen:

  1. ImageProducer ip = im.getSource();
  2. FilteredImageSource fiSource =
        new FilteredImageSource(ip, new NegFilter());
  3. negBild = createImage(fiSource);

De lite fåniga Sverigefiltren ingår inte i själva uppgiften utan kan bara ses som ett smakprov på den frivillga delen av Del 3 som sedan fortsätter i Uppgift3f. Filtren påverkar bildens pixlar i stort sett på samma sätt som de obligatoriska men har även det lilla hacket:
   pixie[index] = (byte)model.getDataElement(compo,0);
       istället för
   pixie[index] = (int)model.getDataElement(compo,0);

Genom denna typomvandlig väljer vi att bygga upp bildens färgskala med enbart de 8 bitar av en integers 32 bitar som representerar blå-gula toner i RGB-modellen.