Niveaux de gris
Le
Sécurité Pointage & Biométrie
Bonjour,
Il y a quelque temps quelqu'un avait demandé comment convertir une image
couleur en image noir et blanc (niveaux de gris), il semble que ma réponse
n'ait pas été publiée, je redonne donc une solution que j'utilise :
// **************************************
PROCEDURE pNiveauGris(cChampImage)
// cChampImage est le nom de l'image à traiter
// Si le nom de l'image est (par exemple) Image1,
// l'appel de la procédure se fait par :
// pNiveauGris("Image1")
eNiveauGris est un entier
elCouleur est un entier sur 4 octets
xMax est un entier = {cChampImage,indChamp}..Largeur
yMax est un entier = {cChampImage,indChamp}..Hauteur
x,y sont des entiers
POUR x=1 A xMax
POUR y=1 A yMax
elCouleur = dPixelCouleur(cChampImage,x,y)
eNiveauGris = (modulo(elCouleur,0x100) + modulo(elCouleur / 0x100,0x100) +
(elCouleur / 0x10000))/3
STOP SI eNiveauGris > 255
dPoint(x,y,RVB(eNiveauGris,eNiveauGris,eNiveauGris))
FIN
FIN
// **************************************
--
Sincères salutations
Jean-Claude FLAJOULOT
Email : sp_nospamm_etb@tiscali.fr
(otez _nospamm_ pour me contacter)
Sécurité Pointage & Biométrie
http://sp-et-b.chez-alice.fr/
Il y a quelque temps quelqu'un avait demandé comment convertir une image
couleur en image noir et blanc (niveaux de gris), il semble que ma réponse
n'ait pas été publiée, je redonne donc une solution que j'utilise :
// **************************************
PROCEDURE pNiveauGris(cChampImage)
// cChampImage est le nom de l'image à traiter
// Si le nom de l'image est (par exemple) Image1,
// l'appel de la procédure se fait par :
// pNiveauGris("Image1")
eNiveauGris est un entier
elCouleur est un entier sur 4 octets
xMax est un entier = {cChampImage,indChamp}..Largeur
yMax est un entier = {cChampImage,indChamp}..Hauteur
x,y sont des entiers
POUR x=1 A xMax
POUR y=1 A yMax
elCouleur = dPixelCouleur(cChampImage,x,y)
eNiveauGris = (modulo(elCouleur,0x100) + modulo(elCouleur / 0x100,0x100) +
(elCouleur / 0x10000))/3
STOP SI eNiveauGris > 255
dPoint(x,y,RVB(eNiveauGris,eNiveauGris,eNiveauGris))
FIN
FIN
// **************************************
--
Sincères salutations
Jean-Claude FLAJOULOT
Email : sp_nospamm_etb@tiscali.fr
(otez _nospamm_ pour me contacter)
Sécurité Pointage & Biométrie
http://sp-et-b.chez-alice.fr/

Poser une question


STOP SI eNiveauGris > 255
qui ne sert que pour le débogage.
--
Sincères salutations
Jean-Claude FLAJOULOT
Email :
(otez _nospamm_ pour me contacter)
Sécurité Pointage & Biométrie
http://sp-et-b.chez-alice.fr/
NOTA :
Les exemples sont en DOS brut
Pour l'execution des commandes DOS il est conseillé d'utiliser la
classe cWDDos du site RBESSET
http://www.wdforge.org/modules/icon...x.php?page5
Pour manipuler les images ( rotations, niveaux de gris,
redimensionnement, conversions, infos EXIF des images numériques )
lorsque Windev ne sait pas faire, il est possible d'utiliser des
programmes DOS.
Ces programmes s'appellent JPEGTRAN, NCONVERT et JHEAD
Ce sont des programmes dont les phases exécutables de faible volume
sont simplement à copier dans le répertoire de travail de l'application
qui les utilise.
Pour extraire les infos EXIF : utiliser JHEAD à récupérer sur le site
suivant :
http://www.sentex.net/~mwandel/jhead/
électionner le module : Pre-built Windows executable jhead.exe
Les commandes paramétrables sont ici :
http://www.sentex.net/~mwandel/jhead/usage.html
Pour les niveaux de gris et les rotations de fichiers JPEG sans perte
des informations EXIF utiliser le programme JPEGTRAN à récupérer sur le
site suivant :
http://membres.lycos.fr/photocanon/.../liens.htm
Pour télécharger rechercher dans la page la ligne :
Télécharger Jpegtran sur le site FTP de ULead ou sur SimTel.
Les commandes paramétrables sont ici :
http://linux.about.com/library/cmd/...egtran.htm
Pour les conversions d'images y compris des formats non utilisés par
Windev utiliser NCONVERT à récupérer sur le site suivant :
http://www.xnview.com/
Dans la colonne gauche, sous NCONVERT cliquer sur Telecharger,
Puis au bas de la nouvelle page ...
Téléchargement direct pour Windows
Cliquez ci-dessous pour télécharger
la dernière version de NConvert pour
Windows
Cliquer sur Télécharger !
Les commandes sont à récupérer dans les fichiers .TXT qui sont aussi
dans le fichier téléchargé
---------- OBSERVATIONS --------------------
Ces programmes sont très puissants il sont tous utilisables de la même
façon c'est à dire :
Créer un fichier .BAT contenant la commande du programme
Lancer l'exécution du fichier .BAT avec LanceAppli
Pour obtenir la vitese maxi du DOS ne pas iconiser l'application, mais
plutot cacher la fenêtre MSDOS en mettant la fenêtre appelante de la
procédure audessus.tout
Voici un exemple d'utilisation avec JHEAD pour son utilisation sous
Windev pour éditer les infos EXIF
PrgLance est une chaîne // contiendra la ligne commande DOS
WInfosExif est une chaine
SI PAS LNomImage = "" ALORS
Sablier(Vrai)
// cette ligne commande constitue le fichier IMGEXIF.TXT
// qui contiendra le texte des informations
// nota : sous W98 il faut utiliser CLS au lieu de EXIT
// pour fermer la fenêtre MS-DOS
PrgLance = "jhead.exe " + LNomImage + " >"+ fRepEnCours() +
"IMGEXIF.TXT"
+ RC + "CLS"
// il faut constituer un fichier .bat qui servira à lancer
// la commande DOS
fSauveTexte("AFFEXIF.BAT",PrgLance)
// il faut cacher la fenêtre DOS sous la fenêtre Windev
// appelante car exeIconise ralentit la vitesse de fermeture
// de la fenêtre MS-DOS
FenEtat("MaFenetreApelante",DessusTout)
// ne pas utiliser exeIconise mais exeActif
LanceAppli("AFFEXIF.BAT",exeActif,Vrai)
// restitue le niveau d'affichage de la fenêtre appelante
FenEtat("MaFenetreAppelante",Normal)
WInfosExif = FChargeTexte(fRepEnCours() + "IMGEXIF.TXT")
Sablier(Faux)
Info(WInfosExif)
SINON
Erreur("Aucune image n'est presente")
FIN
--------------------------------
autre exemple pour passer un image en gamme de gris avec JPEGTRAN
SI PAS WImageATourner = "" ALORS
Sablier(Vrai)
PrgLance = "jpegtran.exe -grayscale -optimize -trim -copy all " +
WImageATourner + " " + WImageResultat + RC + "CLS"
fSauveTexte("ROTATCLS.BAT",PrgLance)
FenEtat("FenetreEnCours",DessusTout)
LanceAppli("ROTATCLS.BAT",exeActif,Vrai)
fCopieFichier(WImageResultat, WImageConservee)
FenEtat("FenetreEnCours",Normal)
WImageAffichee = WImageResultat
Sablier(Faux)
SINON
Erreur("Aucune image n'est presente")
FIN
--------------------------------------------------------
Autre exemple avec NCONVERT pour redimensionner une image en conservant
le ratio Hauteur/Largeur
// nconvert -out jpeg -ratio -resize 480 0 *.jpg
WRedParametre = ""
SI WRedRatio = Vrai ALORS WRedParametre = WRedParametre + " -ratio "
WRedParametre = WRedParametre + " -resize " + WRedLargeur + " " +
WRedHauteur
WRedParametre = WRedParametre + " -rtype " + WRedMethode + " "
SI PAS WImageATourner = "" ALORS
Sablier(Vrai)
// avec nconvert l'image traitée est directement celle donnée à traiter
PrgLance = "nconvert.exe " + WRedParametre + " " + WImageConservee + RC
+ "CLS"
fSauveTexte("ROTATCLS.BAT",PrgLance)
FenEtat("Recherche de fichiers",DessusTout)
LanceAppli("ROTATCLS.BAT",exeActif,Vrai)
FenEtat("Recherche de fichiers",Normal)
WImageAffichee = WImageConservee
Sablier(Faux)
SINON
Erreur("Aucune image n'est presente")
FIN
---------------------
Cordialement
--
Elle est pas belle la vie ?
RBESSET
//autre exemple pour passer un image en gamme de gris avec JPEGTRAN
SI PAS WImageATourner = "" ALORS
Sablier(Vrai)
// procedure utilisant la classe cWDDOS
PrgLance = "cmd.exe /C jpegtran.exe -grayscale -optimize -trim -copy
all " + WImageATourner + " " + WImageResultat + RC + "CLS"
WtxtResultat = ""
WtxtCmd = PrgLance
PExecuteCommandeDos()
fCopieFichier(WImageResultat, WImageConservee)
WImageAffichee = WImageConservee
Sablier(Faux)
SINON
Erreur("Aucune image n'est presente")
FIN
//autre exemple pour changer la valeur GAMMA d'une image NCONVERT
SI PAS WImageATourner = "" ALORS
Sablier(Vrai)
// avec nconvert l'image traitée est directement celle donnée à traiter
// procedure utilisant la classe cWDDOS
PrgLance = "cmd.exe /C nconvert.exe -gamma " + WValeurGamma + " " +
WImageConservee
WtxtResultat = ""
WtxtCmd = PrgLance
PExecuteCommandeDos()
WImageAffichee = WImageConservee
Sablier(Faux)
SINON
Erreur("Aucune image n'est presente")
FIN
//autre exemple pour REDIMENSIONNER une image avec NCONVERT
WRedParametre = ""
SI WRedRatio = Vrai ALORS WRedParametre = WRedParametre + " -ratio "
WRedParametre = WRedParametre + " -resize " + WRedLargeur + " " +
WRedHauteur
WRedParametre = WRedParametre + " -rtype " + WRedMethode + " "
SI PAS WImageATourner = "" ALORS
Sablier(Vrai)
// avec nconvert l'image traitée est directement celle donnée à traiter
// procedure utilisant la classe cWDDOS
PrgLance = "cmd.exe /C nconvert.exe " + WRedParametre + " " +
WImageConservee
WtxtResultat = ""
WtxtCmd = PrgLance
PExecuteCommandeDos()
WImageAffichee = WImageConservee
DetermineModeImage
Sablier(Faux)
SINON
Erreur("Aucune image n'est presente")
FIN
// utilisation de cWDDos
PROCEDURE PExecuteCommandeDos()
WtxtResultat = ""
MyDos:CommandLine_Let(WtxtCmd)
MyDos:ExecuteCommand()
--
Elle est pas belle la vie ?
Juste quelques questions :
- Cela fontionne t'il aussi avec des images autre que jpg ?
- Comment fait t'on pour les licences à la vente de notre appli ?
- Cela ne peut être employé qu'avec des images déjà enregistrées sur disque,
comment faites vous avec des images de caméras en live ?
--
Sincères salutations
Jean-Claude FLAJOULOT
Email :
(otez _nospamm_ pour me contacter)
Sécurité Pointage & Biométrie
http://sp-et-b.chez-alice.fr/
Sécurité Pointage & Biométrie a présenté l'énoncé suivant :
oui nombreux formats
Cette question ne se pose pas pour moi : voir sur les sites présents
dans mon message initial
N'ayant pas ce problème non plus : voir également sur les divers sites
Si tu trouves les réponses il serait bien d'avoir tes conclusions car
la vitesse d'exécution est rapide et la qualité des images obtenues par
ces programmes est absolument impeccable du moins pour ce que j'ai pu
constater en JPEG.
Cordialement
--
Elle est pas belle la vie ?