Comment sauvegarder une image lisible rapidement et uniquement en utilisant le compilateur Fortran!
Fortran n'est pas le premier langage qui vous vient à l'esprit quand on parle de graphismes. Ecrire une image png, binaire n'est pas une opération triviale.
Une alternative pour s'amuser avec des commandes simples mais en produisant tout du moins une image est d'employer un format ASCII. ASCII Signifie que cette image sera un simple fichier texte, lisible par votre éditeur (ainsi qu'un humain). Le format particulier que nous allons employer est le format PGM.
Selon la page descriptive du site d'Adobe: Le format PGM, qui a été inventé à la fin des années 1980 aux États-Unis, se caractérise par sa simplicité. Un fichier PGM contient une seule image simple à retoucher et pour laquelle il est facile d’écrire des programmes.
Une image PGM peut en effet être écrite dans un éditeur de texte, par exemple:
P2
24 7
15
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 3 3 3 3 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 15 15 15 0
0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 15 0
0 3 3 3 0 0 0 7 7 7 0 0 0 11 11 11 0 0 0 15 15 15 15 0
0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 0 0
0 3 0 0 0 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
quand il est ouvert en tant qu'image avec Gimp ou MuFortran donne
En regardant de plus prêt au fichier texte, on remarquera qu'il se compose de
On commence par écrire simplement la chaine P2
integer :: pgm_file = 11
open(file="image.pgm", unit=pgm_file)
write(pgm_file, '(A2)') "P2"
Ensuite, il faut écrire la forme de la matrix ou résolution de l'image. Attention qu'il s'agit du nombre de colonnes suivi du nombre de lignes ici!
write(pgm_file, '(I03, x, I03)') size(img, 2), size(img, 1)
Une dernière étape avec d'écrire la matrice en elle-même: la profondeur de gris:
write(pgm_file, '(I03)') maxval(maxval(img))
Enfin, la matrice
write(pgm_file, imatrix_format(img)) transpose(img)
La fonction imatrix_format est une fonction du genre
character(len=128) function imatrix_format(A) result(fmt)
write (fmt, '(A, I3, A, I3, A)') '(', size(A, 1), '(', size(A, 2), '(I04,1x)/))'
end function
N'oublions pas de fermer le fichier:
close(unit=pgm_file)
home