Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Java - grafika (matrica sa vrednostima piksela)

[es] :: Java :: Java - grafika (matrica sa vrednostima piksela)

[ Pregleda: 2023 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Viktor85
C programer
Beograd

Član broj: 294972
Poruke: 1
212.62.38.*



Profil

icon Java - grafika (matrica sa vrednostima piksela)08.12.2011. u 09:52 - pre 150 meseci
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
NGC5194
 
Odgovor na temu

Deki11

Član broj: 30656
Poruke: 31
*.sbb.rs.



+7 Profil

icon Re: Java - grafika (matrica sa vrednostima piksela)08.12.2011. u 22:18 - pre 150 meseci
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.


 
Odgovor na temu

sanchi
Sanja Jokic
Beograd

Član broj: 148256
Poruke: 104
*.pstech.rs.



+8 Profil

icon Re: Java - grafika (matrica sa vrednostima piksela)09.12.2011. u 13:13 - pre 150 meseci
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
If people were meant to pop out of beds we would all sleep in toasters.
Google is your friend http://justfuckinggoogleit.com/
 
Odgovor na temu

G.Kaplan

Član broj: 294317
Poruke: 11
*.dynamic.isp.telekom.rs.



Profil

icon Re: Java - grafika (matrica sa vrednostima piksela)09.12.2011. u 19:49 - pre 150 meseci
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.
 
Odgovor na temu

Deki11

Član broj: 30656
Poruke: 31
*.dynamic.sbb.rs.



+7 Profil

icon Re: Java - grafika (matrica sa vrednostima piksela)09.12.2011. u 23:59 - pre 150 meseci
@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.

 
Odgovor na temu

G.Kaplan

Član broj: 294317
Poruke: 11
*.dynamic.isp.telekom.rs.



Profil

icon Re: Java - grafika (matrica sa vrednostima piksela)10.12.2011. u 14:37 - pre 150 meseci
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();    



[Ovu poruku je menjao G.Kaplan dana 10.12.2011. u 16:30 GMT+1]
 
Odgovor na temu

Deki11

Član broj: 30656
Poruke: 31
*.dynamic.sbb.rs.



+7 Profil

icon Re: Java - grafika (matrica sa vrednostima piksela)10.12.2011. u 19:16 - pre 150 meseci
Moja greska, zaboravio sam zagrade. Dakle, treba:

return (res << 16) + (res << 8) + res;

 
Odgovor na temu

[es] :: Java :: Java - grafika (matrica sa vrednostima piksela)

[ Pregleda: 2023 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.