Vai al contenuto

convert (.txt / .png)


_Devil_11_

Messaggi raccomandati

Ciao a tutti.

Piano piano mi sto avvicinando alla struttura dei file immagine perché mi piacerebbe capire come sono fatti e come poter disegnare in C++ (anche solamente pixel by pixel). Prima di utilizzare librerie varie preferisco sempre sbattere la testa contro il muro, provando a fare le cose manualmente e partendo da zero; prima di utilizzare la STL ho implementato una lista concatenata e un albero binario di ricerca. Questo per capire a fondo come funzionano le cose, invece di utilizzare librerie senza conoscerne le fondamenta. Mi giudicate pazzo? Sono fatto così.

Comunque ho provato a vedere come è fatta la seguente immagine in .png.

File:PNG_transparency_demonstration_1.png

Il risultato, ottenuto con il comando convert[\B] via terminale (su una versione rimpicciolita a 100x75 pixel), è il seguente file di testo:

# ImageMagick pixel enumeration: 100,75,255,rgba
0,0: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
1,0: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
2,0: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
3,0: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
4,0: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
5,0: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
6,0: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
7,0: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
8,0: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
9,0: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
10,0: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
11,0: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
12,0: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
13,0: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
14,0: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
15,0: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
16,0: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
17,0: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
18,0: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
19,0: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
20,0: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
21,0: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
22,0: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
[...]
64,74: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
65,74: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
66,74: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
67,74: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
68,74: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
69,74: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
70,74: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
71,74: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
72,74: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
73,74: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
74,74: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
75,74: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
76,74: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
77,74: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
78,74: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
79,74: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
80,74: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
81,74: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
82,74: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
83,74: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
84,74: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
85,74: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
86,74: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
87,74: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
88,74: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
89,74: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
90,74: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
91,74: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
92,74: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
93,74: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
94,74: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
95,74: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
96,74: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
97,74: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
98,74: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)
99,74: (255,255,255,  0)  #FFFFFF00  rgba(255,255,255,0)

Utilizzando il comando

convert nomefile.txt nomefile.png

su questo file di testo riottengo l'immagine originale.

Dai commenti si capisce che i primi due numeri sono le coordinate di un pixel (partendo in alto a sinistra mi sembra) e gli altri sono i colori (RGBA).

Ho poi allora creato un piccolo programmino in C++, che mi crei un file di testo con la medesima struttura, semplicemente colorando ogni singolo pixel o di bianco o di nero (in maniera casuale).

#include <iostream>
using std::cout;
using std::cerr;
using std::endl;
using std::ios;

#include <fstream>
using std::ofstream;

#include <ctime>
using std::time;

#include <cstdlib>
using std::exit;
using std::rand;
using std::srand;

int main()
{
srand(time(0));

ofstream outPNGFile("casualImage.txt", ios::out);

if (!outPNGFile) 
{
	cerr << "File could not opened." << endl;
	exit(1);
}

int color;
int alpha = 0;
for (int i = 0; i <= 100; i++) 
{
	for (int j = 0; j <= 100; j++) 
	{
		color = (rand() % 2) * 255;

		outPNGFile << j << ", " << i << ": (" << color << ", " << color << ", " << color << ", " << alpha << ")" << endl;
	}
}

return 0;
}

Il file ottenuto è il seguente:

0, 0: (0, 0, 0, 0)
1, 0: (0, 0, 0, 0)
2, 0: (0, 0, 0, 0)
3, 0: (0, 0, 0, 0)
4, 0: (255, 255, 255, 0)
5, 0: (0, 0, 0, 0)
6, 0: (0, 0, 0, 0)
7, 0: (255, 255, 255, 0)
8, 0: (255, 255, 255, 0)
9, 0: (255, 255, 255, 0)
10, 0: (255, 255, 255, 0)
11, 0: (0, 0, 0, 0)
12, 0: (255, 255, 255, 0)
13, 0: (0, 0, 0, 0)
14, 0: (255, 255, 255, 0)
15, 0: (0, 0, 0, 0)
16, 0: (255, 255, 255, 0)
17, 0: (0, 0, 0, 0)
18, 0: (0, 0, 0, 0)
19, 0: (255, 255, 255, 0)
20, 0: (255, 255, 255, 0)
21, 0: (255, 255, 255, 0)
22, 0: (0, 0, 0, 0)
23, 0: (255, 255, 255, 0)
24, 0: (0, 0, 0, 0)
25, 0: (255, 255, 255, 0)
26, 0: (0, 0, 0, 0)
27, 0: (255, 255, 255, 0)
28, 0: (0, 0, 0, 0)
29, 0: (255, 255, 255, 0)
30, 0: (255, 255, 255, 0)
31, 0: (255, 255, 255, 0)
32, 0: (0, 0, 0, 0)
33, 0: (255, 255, 255, 0)
34, 0: (0, 0, 0, 0)
35, 0: (255, 255, 255, 0)
36, 0: (255, 255, 255, 0)
37, 0: (255, 255, 255, 0)
38, 0: (255, 255, 255, 0)
39, 0: (0, 0, 0, 0)
40, 0: (255, 255, 255, 0)
41, 0: (0, 0, 0, 0)
42, 0: (255, 255, 255, 0)
43, 0: (255, 255, 255, 0)
44, 0: (0, 0, 0, 0)
45, 0: (0, 0, 0, 0)
46, 0: (0, 0, 0, 0)
47, 0: (0, 0, 0, 0)
48, 0: (0, 0, 0, 0)
49, 0: (0, 0, 0, 0)
[...]
71, 99: (255, 255, 255, 0)
72, 99: (0, 0, 0, 0)
73, 99: (255, 255, 255, 0)
74, 99: (255, 255, 255, 0)
75, 99: (0, 0, 0, 0)
76, 99: (0, 0, 0, 0)
77, 99: (0, 0, 0, 0)
78, 99: (0, 0, 0, 0)
79, 99: (255, 255, 255, 0)
80, 99: (0, 0, 0, 0)
81, 99: (0, 0, 0, 0)
82, 99: (255, 255, 255, 0)
83, 99: (255, 255, 255, 0)
84, 99: (0, 0, 0, 0)
85, 99: (0, 0, 0, 0)
86, 99: (255, 255, 255, 0)
87, 99: (0, 0, 0, 0)
88, 99: (0, 0, 0, 0)
89, 99: (255, 255, 255, 0)
90, 99: (255, 255, 255, 0)
91, 99: (0, 0, 0, 0)
92, 99: (0, 0, 0, 0)
93, 99: (255, 255, 255, 0)
94, 99: (0, 0, 0, 0)
95, 99: (255, 255, 255, 0)
96, 99: (0, 0, 0, 0)
97, 99: (255, 255, 255, 0)
98, 99: (255, 255, 255, 0)
99, 99: (255, 255, 255, 0)
100, 99: (0, 0, 0, 0)
0, 100: (255, 255, 255, 0)
1, 100: (0, 0, 0, 0)
2, 100: (255, 255, 255, 0)
3, 100: (255, 255, 255, 0)
4, 100: (0, 0, 0, 0)
5, 100: (0, 0, 0, 0)
6, 100: (255, 255, 255, 0)
7, 100: (255, 255, 255, 0)
8, 100: (0, 0, 0, 0)
9, 100: (0, 0, 0, 0)
10, 100: (0, 0, 0, 0)
11, 100: (255, 255, 255, 0)
12, 100: (0, 0, 0, 0)
13, 100: (255, 255, 255, 0)
14, 100: (255, 255, 255, 0)
15, 100: (255, 255, 255, 0)
16, 100: (255, 255, 255, 0)
17, 100: (255, 255, 255, 0)
18, 100: (0, 0, 0, 0)
19, 100: (0, 0, 0, 0)
20, 100: (0, 0, 0, 0)
21, 100: (0, 0, 0, 0)
22, 100: (255, 255, 255, 0)
23, 100: (255, 255, 255, 0)
24, 100: (255, 255, 255, 0)
25, 100: (0, 0, 0, 0)
26, 100: (255, 255, 255, 0)
27, 100: (0, 0, 0, 0)
28, 100: (255, 255, 255, 0)
29, 100: (0, 0, 0, 0)
30, 100: (255, 255, 255, 0)
31, 100: (0, 0, 0, 0)
32, 100: (0, 0, 0, 0)
33, 100: (255, 255, 255, 0)
34, 100: (255, 255, 255, 0)
35, 100: (0, 0, 0, 0)
36, 100: (255, 255, 255, 0)
37, 100: (255, 255, 255, 0)
38, 100: (0, 0, 0, 0)
39, 100: (255, 255, 255, 0)
40, 100: (255, 255, 255, 0)
41, 100: (255, 255, 255, 0)
42, 100: (255, 255, 255, 0)
43, 100: (255, 255, 255, 0)
44, 100: (255, 255, 255, 0)
45, 100: (255, 255, 255, 0)
46, 100: (0, 0, 0, 0)
47, 100: (255, 255, 255, 0)
48, 100: (255, 255, 255, 0)
49, 100: (0, 0, 0, 0)
50, 100: (255, 255, 255, 0)
51, 100: (255, 255, 255, 0)
52, 100: (255, 255, 255, 0)
53, 100: (0, 0, 0, 0)
54, 100: (255, 255, 255, 0)
55, 100: (0, 0, 0, 0)
56, 100: (255, 255, 255, 0)
57, 100: (0, 0, 0, 0)
58, 100: (255, 255, 255, 0)
59, 100: (0, 0, 0, 0)
60, 100: (255, 255, 255, 0)
61, 100: (0, 0, 0, 0)
62, 100: (0, 0, 0, 0)
63, 100: (0, 0, 0, 0)
64, 100: (255, 255, 255, 0)
65, 100: (0, 0, 0, 0)
66, 100: (0, 0, 0, 0)
67, 100: (0, 0, 0, 0)
68, 100: (255, 255, 255, 0)
69, 100: (255, 255, 255, 0)
70, 100: (0, 0, 0, 0)
71, 100: (0, 0, 0, 0)
72, 100: (0, 0, 0, 0)
73, 100: (0, 0, 0, 0)
74, 100: (0, 0, 0, 0)
75, 100: (255, 255, 255, 0)
76, 100: (255, 255, 255, 0)
77, 100: (255, 255, 255, 0)
78, 100: (0, 0, 0, 0)
79, 100: (0, 0, 0, 0)
80, 100: (0, 0, 0, 0)
81, 100: (0, 0, 0, 0)
82, 100: (0, 0, 0, 0)
83, 100: (0, 0, 0, 0)
84, 100: (0, 0, 0, 0)
85, 100: (0, 0, 0, 0)
86, 100: (0, 0, 0, 0)
87, 100: (255, 255, 255, 0)
88, 100: (255, 255, 255, 0)
89, 100: (255, 255, 255, 0)
90, 100: (0, 0, 0, 0)
91, 100: (255, 255, 255, 0)
92, 100: (0, 0, 0, 0)
93, 100: (255, 255, 255, 0)
94, 100: (255, 255, 255, 0)
95, 100: (255, 255, 255, 0)
96, 100: (0, 0, 0, 0)
97, 100: (255, 255, 255, 0)
98, 100: (255, 255, 255, 0)
99, 100: (0, 0, 0, 0)
100, 100: (255, 255, 255, 0)

Purtroppo utilizzando di nuovo il comando

convert

per convertire il mio file di testo in un immagine .png viene visualizzato il seguente messaggio d'errore:

convert: delegate library support not built-in `(null)' (Freetype) @ annotate.c/RenderFreetype/1417.

Che significa? Cosa c'è che non va? Come mai il mio file non viene compilato mentre l'altro si? Cosa manca nel mio file? Il problema potrebbe essere nel comando convert?

Grazie a tutti per eventuali risposte.

Rocco.

Link al commento
Condividi su altri siti

Archiviato

Questa discussione è archiviata e chiusa a future risposte.

×
×
  • Crea Nuovo...