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