Č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
>
>