Če prav razumem, te zanima kako iz slike ki jo imaš na disku dobiti
podatke o intezitetah barv pikslov (branje slike)...

Prof. Jager je predlagal, da za format slike uporabljamo PPM in PGM
format v ASCII zapisu,  za katera velaj sledeče - prve 4, oz. 5 vrstic
so podatki o sliki in veljajo tako za PPM, kot za PGM:
1. vrstica: tip slike - PGM v ASCII zapisu "P2", v binarnem pa "P5",
PPM v ASCII zapisu "P3" in v binarnem zapisu "P6"
2. vrstica: je pogojna, obstaja le, če se začne s "#" in kar sledi je komentar
3. vrstica (ce komentarja ni, je to 2. vrstica...): podatki o širini
in višini slike
4. vrstica: podatek o najvecji intenziteti (ce bos shranjeval slike v
ASCII zapisu je to zmeraj 256)

vse naslednje vrstice vsebujejo le en podatek in tu je razlika med PPM
in PGM. Za PPM v ASCII obliki potrebuješ za 1 piksel 3 vrstice (rdečo,
zeleno in modro intenziteto), medtem ko pri vseh ostalih kombinacijah
zapisa zadostuje 1 vrstica za 1 piksel. Za branje ASCII zapisa lahko
uporabiš kar fscanf() funkcijo.

PRIMER:
Tabela za sliko velikosti 3x4 piksle v obeh formati:
za PGM                     zapis tega v datoteki:
+----+-----+----+----+      P2
| 15 | 20 | 23 | Gr |      # Nek komentar
+----+----+-----+----+      4 3
| Gr | Gr | Gr | Gr |      256
+----+----+-----+----+      15
| Gr | Gr | Gr | Gr |       20
+----+----+-----+----+       23
                                 ...

za PPM
        zapis v datoteki
+----+------+----+----+ ----+-----+----+----+----+-----+----+----+        P3
| 12 | 102 | 4  | 15 | 99 | 5    | R  | G  | B  | R   | G  | B  |
  # Komentar
+----+------+----+----+ ----+-----+----+----+----+-----+----+----+        4 3
| R  | G    | B  | R |  G  | B   | R  | G  | B  | R   | G  | B  |        256
+----+------+----+----+ ----+-----+----+----+----+-----+----+----+        12
| R  | G    | B  | R |  G  | B   | R  | G  | B  | R   | G  | B  |        102
+----+------+----+----+ ----+-----+----+----+----+-----+----+----+        4

               15

               99

               5

               ...

(pol)algoritem v C:

unsigned char *matrika;
int visina, sirina, max_intenzitet, r, g, b;
int i, j;
FILE *slika;

silka = fopen ("ime_slike.ppm", "r");

/* tu se vstavi par vrstic, ki berejo podatke o tipu in komentar */

fscanf (slika, "%d %d\n%d", &sirina, &visina, &max_intenzitet);

matrika = (unsigned char *) malloc (sirina * visina * 3 * sizeof (char));

for (i = 0; i < visina; i++)
{
  for (j = 0; j < sirina; j++)
  {
     fscanf (slika, "%d\n%d\n%d", &r, &g, &b);

     matrika[i][3*j] = r;
     matrika[i][3*j+1] = g;
     matrika[i][3*j+2] = b;
  }
}

fclose (slika);


in tako napolniš matriko za PPM (za PGM, ni potrebno brati 3
intenzitet, ampak samo eno, zato je potrebno primerno popravit
algoritem). Upam da bo zadosti natančen odgovor...




lp,
tomi


On 1/2/07, Ales Glavina <[EMAIL PROTECTED]> wrote:
Torej delam v GTK-ju, jaz morem dobit matriko pikslov ki jo potem primerjam
z eno masko in se odločim ali pobarvam ali ne ta pixel in ne vem kako dobit
to matriko s pixli, ostalo ni problema imam že narjeno samo to me še muči

Lp Aleš

-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of
Tomi Erlih
Sent: Tuesday, January 02, 2007 3:30 PM
To: FRIClist
Subject: Re: [Friclist] GTP seminar

Glede na to da so vrednosti vseh pikslov shranjeni v matkiri z
intenzitetami barv, dobis vrednosti  za piksel[i][j] vrednosti rdece:
matrika[i][j*3], zelene: matrika[i][j*3+1], modre: marika[i][j*3+2]...

A predvidevam, da te ni tocno to zanimalo..malo bolj natancno opisi,
kaj tee zanima in v cem delas (motif, gtk, Qt, ...)


lp,
tomi

On 1/2/07, Ales Glavina <[EMAIL PROTECTED]> wrote:
>  Je kdo ki ve kako se dobi vrednosti posameznih pikslov od slike ki smo jo
> izbrali za obdelavo?
>
>
>
> Hvala
>
>

Reply via email to