Suppression partielle du contenu d une image

MangaDingue
Messages postés
2
Date d'inscription
mardi 16 septembre 2003
Statut
Membre
Dernière intervention
28 juin 2005
- 28 juin 2005 à 16:47
ProgElecT
Messages postés
2
Date d'inscription
dimanche 19 juin 2005
Statut
Membre
Dernière intervention
3 octobre 2008
- 28 juin 2005 à 22:35
salut

voici mon probleme,
j ai un picturebox avec une image et je voudrais enlever une certaine partie de cette image
le but etant d obtenir une image de forme hexagonale
j ai regardé les sources sur le site mais je n ai pas trouvé mon bonheur
si quelqu un pouvait me venir en aide ce serait vraiment cool

merci d avance ++

2 réponses

Vincentsoft
Messages postés
68
Date d'inscription
jeudi 26 octobre 2000
Statut
Membre
Dernière intervention
17 avril 2009

28 juin 2005 à 18:01
Salut,



J'ai peut être une solution mais je peux pas la tester tout de suite, donc je te l'explique mais je te garanti rien.

Il faut parcourir ton image (picturebox) pixel par pixel et noircir
ceux qui ne doivent pas être affiché (ceux dont les coordonnées dans
l'image n'appartiennent pas à ton hexagone). Pour noircir un pixel dans
l'image, il faut utiliser un API, dont j'ai perdu le nom, mais je sais
qu'elle existe (un nom comme setPixel ou qqch comme ça). Ou même qu'il
y a peut être une fonction dans le picturebox qui le permet
directement, je ne sais plus (et je peux pas vérifier, j'ai pas VB ici).



Et pour déterminer les pixels qui doivent être cachés, faut que tu
vérifies pendant ton parcours si ses coordonnées appartiennent ou pas à
l'hexagone (mathématiquement)...pour le parcours, il faut juste
utiliser je pense deux boucles imbriquées qui parcourent la largeur et
la longueur.

ensuite, si tu veux enregistrer l'image (pour que le fichier soit
modifié aussi), c'est le même principe mais faut parcourir le fichier
lui même et non le picture box. Pour les fichier BMP, ça se fait assez
bien mais pour les jpg, je sais pas trop, faudrai voir sur le site...



Voilà, je sais pas si je répond bien à ta question, j'espère...



Vincent
0
ProgElecT
Messages postés
2
Date d'inscription
dimanche 19 juin 2005
Statut
Membre
Dernière intervention
3 octobre 2008

28 juin 2005 à 22:35
'Dans un module


'pour rendre une des couleurs copiées transparente
Public Declare Function TransparentBlt Lib "msimg32.dll" (ByVal hdc As Long, _
ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, _
ByVal hSrcDC As Long, _
ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, _
ByVal crTransparent As Long) As Boolean


Public Couleurtransparente As Long


Public
HSour, LSour, LeftSour, TopSour As Integer
Public
HDest, LDest, LeftDest, TopDest As Integer



'sur une Form


'1 CommandButton.name = CmdTransparentes
'1 pictureBox.name = PictSource
'1 pictureBox.name = PictFond
'1 pictureBox.name = PictResult
'les 3 pictureBox.ScaleMode = 3 (pixel)
' pictureBox.AutoRedraw = True



Private Sub CmdTransparentes_Click()
''********* Copie avec couleur transparante ********
HDest = PictSource.ScaleHeight
LDest = PictSource.ScaleWidth
LeftDest = (PictFond.ScaleWidth - PictSource.ScaleWidth) / 2
TopDest = (PictFond.ScaleHeight - PictSource.ScaleHeight) / 2 HSour HDest: LSour LDest: TopSour = 0: LeftSour = 0


'charge une image contenu dans un pictureBox(PictFond.Image) pour avoir un fond (dans ton cas image à retailler en forme d'hexagone)
'sur lequel sera dessiné l'image contenant une couleur devant etre transparente (PictSource) dans ton cas image en 2 couleurs d'un hexagone, l'exagone de couleur ROUGE, l'exterieur noir ou autre


'Couleur a rendre transparente = ROUGE
Couleurtransparente=255


PictResult.Picture = PictFond.Image: DoEvents
'image forcement d'arriere plan
'dimmensionne au format de l'image fond PictResult.Height PictFond.Height: PictResult.Width PictFond.Width


TransparentBlt PictResult.hdc, LeftDest, TopDest, LDest, HDest, _
PictSource.hdc, LeftSour, TopSour, LSour, HSour, Couleurtransparente


PictResult.Visible = True: PictResult.Refresh
End Select
End Sub



'Ton image dans PictResult sera toujour carré ou rectangulaire, mais 'sera entouré d'un cadre hexagonale de couleur
'noir ou autre
Salut de ProgElecT
0