PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Détecter la transparence d'une image
Détecter la transparence d'une image
Débuté par Xav, 08 jan. 2025 11:24 - 5 réponses
Posté le 08 janvier 2025 - 11:24
Bonjour à tous,

Savez-vous comment détecter si une image possède un fond transparent ?

Dans une fenêtre, il y a un champ image (champ GUI avec fond transparent). L'utilisateur peut insérer une image via un bouton de sélection qui appelle la fonction fSélecteurImage.

L'objectif est de déterminer si l'image de l'utilisateur contient un fond transparent.

- Si l'image n'a pas de fond transparent, j'aimerais utiliser une méthode pour remplacer le fond par un fond transparent en utilisant dSauveImagePNG.
- Si l'image a déjà un fond transparent, je ne fais rien.

Je sais qu'il est possible de parcourir les pixels de l'image, mais je ne trouve que les valeurs RVBRouge, RVBVert et RVBBleu sans la composante alpha (transparence).

Est-ce que quelqu'un pourrait m'expliquer comment vérifier si un pixel d'une image est transparent ou s'il existe une méthode pour extraire cette information de manière efficace ?

Merci beaucoup pour vos conseils et votre aide !
Membre enregistré
2 139 messages
Posté le 08 janvier 2025 - 13:42
Membre enregistré
164 messages
Posté le 08 janvier 2025 - 16:02
Bonjour

Je vois votre problème, vous avez un projet de savoir chaque information du pixel dans une image, j'ai deux solutions pour vous, vous pouvez choisir

1. Soit vous devrez collaborer avec un programmeur pour réaliser ce projet, parce que ce serait un super projet réalisable
2. Soit vous devrez faire des recherches sur la récupération du couleur dans une image, ce ne serait pas difficile je pense

Pour le cas1, je suis preneur pour réaliser votre projet
Pour le cas 2, je pense que dans le temps on sait récupérer les couleurs dans une image, je veux dire RVB(Entier, Entier, Entier)

NB : la syntaxe dSauveImagePNG() serait une idée pour sauvegarder une image de format png, c'est déjà une avance dans le projet

Cordialement
Mr.RATSIMANDRESY
Niry Aina Eddy
Posté le 13 janvier 2025 - 08:16
Jean-Pierre BLOCH a écrit :


Bonjour et merci pour la piste.
Effectivement ça permet d'afficher une image en transparent. Par contre, dans mon cas, la qualité de la mise en transparence n'est pas suffisante. En effet, dans mon cas, ce sont des signatures d'utilisateurs qui sont scannées et puis transformées en image. Du coup, la qualité des pixels n'est pas souvent précise. Et, en utilisant ModeTransparence.trsCoinHautGauche, ça met en transparent mais pas totalement, ex: au bord des traits de la signature.

De plus, une fois l'image affichée en transparent, nous l'enregistrons dans notre base de donnée et la transparence se perd.
Posté le 13 janvier 2025 - 08:21
Niry Aina Eddy RATSIMANDRESY a écrit :
Bonjour

Je vois votre problème, vous avez un projet de savoir chaque information du pixel dans une image, j'ai deux solutions pour vous, vous pouvez choisir

1. Soit vous devrez collaborer avec un programmeur pour réaliser ce projet, parce que ce serait un super projet réalisable
2. Soit vous devrez faire des recherches sur la récupération du couleur dans une image, ce ne serait pas difficile je pense

Pour le cas1, je suis preneur pour réaliser votre projet
Pour le cas 2, je pense que dans le temps on sait récupérer les couleurs dans une image, je veux dire RVB(Entier, Entier, Entier)

NB : la syntaxe dSauveImagePNG() serait une idée pour sauvegarder une image de format png, c'est déjà une avance dans le projet

Cordialement
Mr.RATSIMANDRESY
Niry Aina Eddy




Bonjour,

merci pour la proposition.

Ce que je recherche, plus précisément, c'est le moyen de détecter si une image a déjà un fond transparent ou non. En gros, si l'utilisateur sélectionne une image sans fond transparent, j'aimerais exécuter la méthode qui met l'image en fond transparent. Par contre, si l'image est déjà avec fond transparent, je ne veux pas lancer la méthode qui met l'image en transparent.

En parcourant les pixels de l'image, est-ce possible de détecter s'ils sont transparent ?

Je peux récupérer les couleurs, mais la transparence ?
Membre enregistré
458 messages
Posté le 13 janvier 2025 - 19:11
Bonjour,

Potentiellement il s'agit de la fonction dPixelOpacité() : https://doc.pcsoft.fr/fr-FR/?1000017029&name=dpixelopacite_fonction

Si on veut être tatillon, il faudrait passer sur chaque pixel de l'image pour savoir si elle est transparente ou non, mais il y a des moyens d'optimiser si on estime que les images sont des cas "standard" (c'est-à-dire pas des images de 6000x4000 où tout serait en couleur sauf le pixel du centre).

Si on a plus souvent des images détourées par exemple, vérifier avant tout les 4 coins de l'image, puis partir en "serpentin" jusqu'au centre pour s'arrêter dès le premier pixel transparent pourrait donner de bonnes performances.