PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Taille "utile" d'une image
Taille "utile" d'une image
Iniciado por j.hautbois, 28,ago. 2019 18:12 - 3 respuestas
Publicado el 28,agosto 2019 - 18:12
Bonjour,
J'ai un champ image de 100x100 pixels avec comme mode d'affichage homothétique centré et comme mode de transparence le coin haut-gauche
Je lui affecte un BMP "carré":
monChamp= "c:\monfichier.bmp"

Je souhaiterais connaitre la taille "utile" affichée, en tenant compte de la transparence. SI par exemple, le fichier d'origne fait 256x256px, la plus grande des dimensions devrait être 100px, mais, en tenant compte de la transparence, l'autre dimension devrait être ingérieure (je ne suis pas sûr d'être très clair...)

Comment faire pour obtenir les dimensions de l'image "visible" ?

Je devrais pouvoir m'en sortir en récupérant la couleur de transparence (dPixelCouleur(monChamp,1,1) puis à grands coups de boucles, mais ca me semble bien lourd.

Avez-vous une piste à me donner ?
Par avance, merci

Jérôme
Miembro registrado
4.361 mensajes
Publicado el 29,agosto 2019 - 08:44
Bonjour,
Si j'ai bien tout compris en prenant l'image ci-dessous, le vert étant la couleur de transparence, tu veux la taille de la partie rouge.





--
Il y a peut être plus simple, mais, ça tourne
Publicado el 29,agosto 2019 - 09:29
Bonjour,

Oui, c'est exactement ça.
Comme quoi, un schéma vaut mieux qu'un long discours.

J'en profite pour anticiper d'éventuelles réponses. En réalité, le champ est alimenté à partir d'un mémo binaire (code monChampImage=vignette.contenu), pour lequel InfoBitMap me renvoie toujours une taille de 100x100, avec ma vignette sur fond blanc, et je n'ai pas accès au fichier d'origine.
Publicado el 29,agosto 2019 - 14:50
Sans solution toute faite, je m'en suis sorti par code. A toute fin utile, je vous livre ma fonction. N'ayant pas besoin de taille exacte, j'ai effectué des pas dans ma boucle pour accélérer le trraitement, au prix d'une taille approximée. Et le code sera bien entendu à adapter à vos besoins

PROCÉDURE vignetteTaille()

coulFond est un entier= dPixelCouleur(imgTmp,1,1)

PROCÉDURE INTERNE vignetteLigne(pNoLigne)

POUR i=5 À imgTmp..Largeur PAS 20
SI dPixelCouleur(imgTmp,i,pNoLigne)<>coulFond ALORS RENVOYER Vrai
FIN
RENVOYER Faux
FIN

PROCÉDURE INTERNE vignetteColonne(pNoColonne)
POUR i=5 À imgTmp..Hauteur PAS 20
SI dPixelCouleur(imgTmp,pNoColonne,i)<>coulFond ALORS RENVOYER Vrai
FIN
RENVOYER Faux
FIN

estHorizontal est un booléen= vignetteColonne(1)
estVertical est un booléen= vignetteLigne(1)

SI PAS estHorizontal ET PAS estVertical ALORS RENVOYER "ERR1"+TAB+"0"+TAB+"0"
SI estHorizontal ET estVertical ALORS RENVOYER "OK1"+TAB+imgTmp..Largeur+TAB+imgTmp..Hauteur

SI estHorizontal ALORS
POUR i=2 À imgTmp..Hauteur/2 PAS 2
SI vignetteLigne(i) ALORS RENVOYER "OK2"+TAB+imgTmp..Largeur+TAB+(imgTmp..Hauteur-2*i)
FIN
RENVOYER "ERR2"+TAB+"0"+TAB+"0"
FIN

POUR i=2 À imgTmp..Largeur/2 PAS 2
SI vignetteColonne(i) ALORS RENVOYER "OK3"+TAB+(imgTmp..Largeur-2*i)+TAB+imgTmp..Hauteur
FIN
RENVOYER "ERR3"+TAB+"0"+TAB+"0"
Fin