Witam,
Mam do przygotowania program, który będzie ładować plik w formacie PGM, zliczać x,y resolution i zapisywać w tabeli. Na razie doszedłem do zapisania wszystkich pikseli obrazka w tabeli metody pixtab. Pozostaje problem wczytania każdego w pętli i zamiany wartości na odwrotne z przedziału 256 kolorów tak aby powstał negatyw. Na razie doszedłem do zamiany, której nie potrafię zaimplementować w kod

 byte [] public
int bufor,
int k;
bufor=(int)piksele(k);
bufor=bufor+128;
bufor=255-bufor; //powstaje negatyw
bufor=bufor-128,
piksle[k]=(byte)bufor;

Kod pierwotny

 
package lena;

import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StreamTokenizer;

 class PGMImage {
protected int xres;// zmienna chroniona
	public int getXresolution () 
	{
	return xres;// zwraca wartość (rozdzielczość x)
	}
	protected int yres;
	public int getYresolution ()
	{
	return yres;// zwraca rozdzielczość 
	}
protected byte[] pt=null; //tworzymy tablice, null to brak adresu fizycznego w pamieci,
public byte[] pixTab()//metoda, która zwraca adres poczatku tablicy z pikselami
{
	return pt;// zwraca piksele
}
     private int[] readHeader(String fileName) throws IOException {// private to największy status ochrony, metoda czytająca nagłowek i zbierająca potrzebne info, int- liczba wierszy nagłowka
BufferedReader br=new BufferedReader(new FileReader (fileName));//powołujemy nowy obiekt o wyyślonej nazwie br z klasy bufforedReader
     if (br.read()!='P' )//! tzn. jeżeli nie bedzie
    	 throw new IOException("Błedny nagłowek"); 
     if (br.read()!='5' )
    	 throw new IOException("Błedny nagłowek"); 
     StreamTokenizer st= new StreamTokenizer(br);
     st.commentChar ('#');//informjemy, że znakiem rozpoczynającym komentaRZ jest #
     boolean wrong=false;
     if (st.nextToken()==StreamTokenizer.TT_NUMBER) xres=(int) st.nval;// wczytuje kolejną całostkę, jezęli te znaki sąliczbą to weź jej wartość numeryczną, zamien na int i podstaw pod x
     else wrong=true;
     if (wrong) throw IOException();
     br.close();
     return st.lineno();
     }
     
     public void load (String fileName) throws IOException
     {
     int line=readHeader(fileName);
     FileInputStream fis= new FileInputStream (fileName);//czytanie z pliku
     int c=0;		//licznik linii
     while (c<line)
     if (fis.read()=='\n')
     c++;
     pt=new byte [xres*yres];
     fis.read(pt);
     fis.close(); //zamknięcie strumienia
     }
     
     private void writeHeader(String fileName) throws IOException { // metoda zapisywania nagłówka
    	 PrintWriter pw=new PrintWriter(new FileWriter(fileName));// klasa print writer wymaga przy tworzeniu podania obiektu innej klasy
     pw.print("P5 # my pgm \n" +xres + "  "+ yres+"\n255");//zapisanie nagłowka
     pw.close(); //zamknięcie pliku
     }
     
     public void save(String fileName) throws IOException 
     {
    	 writeHeader (fileName);
    	 BufferedOutputStream bos= new BufferedOutputStream (new FileOutputStream (fileName));
    	 bos.write(pt);
    	 bos.close();
     }
     
     
 }