Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 6 odgovora
  • 2.896 pregleda

Najnovija ↓

Java - grafika (matrica sa vrednostima piksela) 08.12.2011. u 10:52 · pre 181 mesec #1
Zdravo svima,

Par dana pokusavam da pronadjem na googl-u, forumima itd. kako u Javi napisati klasu koja iscrtava sliku predstavljenu 2d matricom na ekran. Indeksi matrice predstavljaju piksele, a njihova vrednost odredjuje kojom bojom ce piksel biti iscrtan. Ono sto je problem je sto boje treba da budu crne - najveca vrednost i bele - najmanja vrednost, dok ostale vrednosti nekom nijansom sive (u zavisnosti od vrednosti ). Naravno ne treba mi gotovo resenje :) ali bar neka kratka uputstva bi mi mnogo znacila :) hvalal unapred :)
Potpis
NGC5194
Re: Java - grafika (matrica sa vrednostima piksela) 08.12.2011. u 23:18 · pre 181 mesec #2
Ajd samo smernice da ti dam :)

Najpre boja: tebi treba sive nijanse, a kod njih su sve 3 komponente boje (R, G, B) jednake.

Prodji kroz sve vrednosti matrice i pronadji maksimalnu vrednost, i upamti je (npr. maxValue) , ona ce sluziti za normalizaciju.
Zatim odredjujemo boju svakog piksela:

float componentIntensity = 1.0f - currentPixValue/maxValue

Oduzimanje od 1 je potrebno jer bi u suprotnom najveca vrednost bila bela (1.0, 1.0, 1.0), a nama treba crna (0.0, 0.0, 0.0))
Dakle, boja tekuceg piksela je
(componentIntensity , componentIntensity , componentIntensity ).

Ajd ako se ne snadjes, razjasnicemo detaljnije.


Re: Java - grafika (matrica sa vrednostima piksela) 09.12.2011. u 14:13 · pre 181 mesec #3
Imas ovde neko uputstvo za iscrtavanje pojedinacnih pixela... nisam probala. Valjda iteracija kroz matricu nece biti problem :)
http://stackoverflow.com/questions/3325546/how-to-color-a-pixel
Potpis
If people were meant to pop out of beds we would all sleep in toasters.
Google is your friend http://justfuckinggoogleit.com/
Re: Java - grafika (matrica sa vrednostima piksela) 09.12.2011. u 20:49 · pre 181 mesec #4
i ja pokusavam nesto slicno. tacnije, hocu da slici izvucem ivice (sobelom npr.) i da je takvu snimim u grayscale varijanti, sto mi ne uspeva. procedura je sledeca: sliku prvo pretvorim u matricu, pa predjem maskom preko nje i na kraju matricu konvertujem nazad u sliku.

rezultat je sledeci:

http://imageshack.us/photo/my-images/577/penji.jpg/
http://imageshack.us/photo/my-images/824/imgcon.png/


evo i delova koda:

1) slika u matru
Code:

private int[][] toMatrix(){
        int[][] matrix = new int[this.img.getHeight()][this.img.getWidth()];        
        
        for(int i = 0; i < this.img.getHeight(); i++){
            for(int j = 0; j < this.img.getWidth(); j++){
                matrix[i][j] = convertePixToGray(this.img.getRGB(i, j));
            }
        }    
        return matrix;
    }    

    private int convertePixToGray(int pixel){
        int r, g, b;
        
        Color c = new Color(pixel);
        
        r = c.getRed();
        g = c.getGreen();
        b = c.getBlue();
        //ovo bi valjda trebalo da izracuna intenzitet sivila?
        return (int) (0.2989 * r + 0.5870 * g + 0.1140 * b);
    }


2) nazad
Code:

public void matrixToImage(){
        for(int i = 0; i < this.img.getHeight(); i++){
            for(int j = 0; j < this.img.getWidth(); j++){
                this.img.setRGB(i, j, this.matrix[i][j]);    
            }
        }    
    }


moguce da sam negde napravio strasnu glupost jer o citavom problemu (img processing) znam jako malo, a i s javom sam na vi. sugestije su dobrodosle.
Re: Java - grafika (matrica sa vrednostima piksela) 10.12.2011. u 00:59 · pre 181 mesec #5
@G.Kaplan
greska je matrix[j] = convertePixToGray(this.img.getRGB(i, j));
Ovu vrednost koju si dobio sa convert treba da dobiju sve 3 komponente,
dakle,

int a = convertePixToGray(this.img.getRGB(i, j));
matrix[j] = a<<16 + a<<8 + a;

ili u prevodu: bitovi 16-23 predstavljaju R komponentu, bitovi 8-15 su G komponenta, a 0-7 su B komponenta.
I sve tri mora da budu jednake da bi boja bila siva!
(A ono '<<' je shiftovanje bitova za 16 odn. 8 mesta...)

Probaj pa javi rezultate.

Re: Java - grafika (matrica sa vrednostima piksela) 10.12.2011. u 15:37 · pre 181 mesec
izmenjeno 1 put, poslednji put G.Kaplan 10.12.2011. u 16:30
  1. G.Kaplan10.12.2011. u 16:30zapis iz teksta poruke
#6
hvala na odgovoru ali rezultat je: http://imageshack.us/photo/my-images/811/imgcon.png/
ovo je bez izvlacenja ivica, znaci samo slika u matricu i nazad.

Code:

private int convertePixToGray(int pixel){
        int r, g, b;
        int res;
        
        Color c = new Color(pixel);
        
        r = c.getRed();
        g = c.getGreen();
        b = c.getBlue();
        
        res = (int)(0.2989 * r + 0.5870 * g + 0.1140 * b);
        return res << 16 + res << 8 + res;
    }


ova izmena na kraju je resila prob. hvala.
Code:

c = new Color(res, res, res);
return c.getRGB();    
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme