begin process at 2012 02 13 23:44:10
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > FORM AVEC BORDS IRREGULIERS A PARTIR D'UNE IMAGE

FORM AVEC BORDS IRREGULIERS A PARTIR D'UNE IMAGE


 Information sur la source

Note :
9,1 / 10 - par 58 personnes
9,10 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Graphique Classé sous :form, irrégulier, skin, image, bord Niveau :Initié Date de création :01/05/2001 Vu / téléchargé :22 632 / 1 883

Auteur : fabiin

Ecrire un message privé
Site perso
Commentaire sur cette source (36)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Vous connaissez tous le logiciel winamp ??? avec des skins transparent ?
Voici comment faire pareil , et très rapidement !!!
(y'a un exemple dasn le zip)
il faut:
- une picturebox(picture1) avec la l'image ke vous voulez dedans

Source

  • '----- DANS UNE FORM -----
  • Private Sub Form_Load()
  • Dim WindowRegion As Long
  • 'Propriétés de la picture box
  • Picture1.AutoRedraw = True
  • Picture1.BorderStyle = 0
  • Picture1.ScaleMode = 3
  • 'Position de la picture box
  • Picture1.Top = 0: Picture1.Left = 0
  • '"Découpe" la form suivant Picture1
  • WindowRegion = MakeRegion(Picture1)
  • SetWindowRgn Me.hWnd, WindowRegion, True
  • End Sub
  • '----- DANS UN MODULE -----
  • Public Declare Function GetPixel Lib "gdi32" (ByVal hDC As Long, ByVal X As Long, ByVal Y As Long) As Long
  • Public Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
  • Public Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
  • Public Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
  • Public Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
  • Public Const RGN_OR = 2
  • Public Function MakeRegion(picSkin As PictureBox) As Long
  • ' faites une fenêtre "région" basée sur une picture de picture box
  • ' Ceci ce fait en passant l'image pixel par pixel et en créant une
  • ' région pour chaque pixel non transparent
  • ' Le code est optimisé, il est donc assez rapide
  • Dim X As Long, Y As Long, StartLineX As Long
  • Dim FullRegion As Long, LineRegion As Long
  • Dim TransparentColor As Long
  • Dim InFirstRegion As Boolean
  • Dim InLine As Boolean
  • Dim hDC As Long
  • Dim PicWidth As Long
  • Dim PicHeight As Long
  • hDC = picSkin.hDC
  • PicWidth = picSkin.ScaleWidth
  • PicHeight = picSkin.ScaleHeight
  • InFirstRegion = True: InLine = False
  • X = Y = StartLineX = 0
  • ' Ici, la couleur de transparence est basé sur le pixel en haut a gauche
  • ' Mais vous pouvez mettre la couleur ke vous voulez
  • TransparentColor = GetPixel(hDC, 0, 0)
  • For Y = 0 To PicHeight - 1
  • For X = 0 To PicWidth - 1
  • If GetPixel(hDC, X, Y) = TransparentColor Or X = PicWidth Then
  • If InLine Then
  • InLine = False
  • LineRegion = CreateRectRgn(StartLineX, Y, X, Y + 1)
  • If InFirstRegion Then
  • FullRegion = LineRegion
  • InFirstRegion = False
  • Else
  • CombineRgn FullRegion, FullRegion, LineRegion, RGN_OR
  • DeleteObject LineRegion
  • End If
  • End If
  • Else
  • If Not InLine Then
  • InLine = True
  • StartLineX = X
  • End If
  • End If
  • Next
  • Next
  • MakeRegion = FullRegion
  • End Function
'----- DANS UNE FORM -----
Private Sub Form_Load()
    Dim WindowRegion As Long
    'Propriétés de la picture box
    Picture1.AutoRedraw = True
    Picture1.BorderStyle = 0
    Picture1.ScaleMode = 3
    
    'Position de la picture box
     Picture1.Top = 0: Picture1.Left = 0
    
    '"Découpe" la form suivant Picture1
    WindowRegion = MakeRegion(Picture1)
    SetWindowRgn Me.hWnd, WindowRegion, True
End Sub

'----- DANS UN MODULE -----

Public Declare Function GetPixel Lib "gdi32" (ByVal hDC As Long, ByVal X As Long, ByVal Y As Long) As Long
Public Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Public Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Public Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
Public Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Public Const RGN_OR = 2

Public Function MakeRegion(picSkin As PictureBox) As Long
    
    ' faites une fenêtre "région" basée sur une picture de picture box
    ' Ceci ce fait en passant l'image pixel par pixel et en créant une
    ' région pour chaque pixel non transparent
    ' Le code est optimisé, il est donc assez rapide
    
    Dim X As Long, Y As Long, StartLineX As Long
    Dim FullRegion As Long, LineRegion As Long
    Dim TransparentColor As Long
    Dim InFirstRegion As Boolean
    Dim InLine As Boolean
    Dim hDC As Long
    Dim PicWidth As Long
    Dim PicHeight As Long
    
    hDC = picSkin.hDC
    PicWidth = picSkin.ScaleWidth
    PicHeight = picSkin.ScaleHeight
    
    InFirstRegion = True: InLine = False
    X = Y = StartLineX = 0
    
    ' Ici, la couleur de transparence est basé sur le pixel en haut a gauche
    ' Mais vous pouvez mettre la couleur ke vous voulez
    TransparentColor = GetPixel(hDC, 0, 0)
    
    For Y = 0 To PicHeight - 1
        For X = 0 To PicWidth - 1
            
            If GetPixel(hDC, X, Y) = TransparentColor Or X = PicWidth Then

                If InLine Then
                    InLine = False
                    LineRegion = CreateRectRgn(StartLineX, Y, X, Y + 1)
                    
                    If InFirstRegion Then
                        FullRegion = LineRegion
                        InFirstRegion = False
                    Else
                        CombineRgn FullRegion, FullRegion, LineRegion, RGN_OR

                        DeleteObject LineRegion
                    End If
                End If
            Else
                If Not InLine Then
                    InLine = True
                    StartLineX = X
                End If
            End If
        Next
    Next
    
    MakeRegion = FullRegion
End Function
   

 Conclusion

Voila !

CE CODE N'EST PAS DE MOI:
Je l'ai trouvé a l'adresse suivante :
http://www.freevbcode.com/ShowCode.Asp?ID=1124
c omme je l'ai pas trouvé avant sur ce site, g pensé utile de le rajouter

@+
fabs ;-)

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture LINKODOTRON : PETITE BARRE DE RACCOURCIS
TUER UNE APPLICATION WINDOWS
Source avec Zip Source avec une capture NEIGE VB
Source avec Zip Source avec une capture OPERA POPUP KILLER
Source avec Zip Source avec une capture DESSINER SUR LA BARRE DU TITRE (SUR LA FENÊTRE ENTIÈRE)

 Sources de la même categorie

Source avec Zip Source avec une capture Source .NET (Dotnet) CREER UN GIF ANIMÉ par Le Pivert
Source avec une capture GRAPH PHP COURBE DE CHARGE par s.defaye
Source avec Zip Source avec une capture BOULE DE CRISTAL par BLUEBIBUBBLE
VB6 - DÉPLACEMENT D'UN CONTRÔLE SUR UN SEGMENT DE DROITE DÉL... par ucfoutu
Source avec Zip Source .NET (Dotnet) APPLICATION DE DESSIN par fsafsafsaf

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) CREER UN GIF ANIMÉ par Le Pivert
Source avec Zip Source avec une capture Source .NET (Dotnet) THEROCKRADIO - CHANSON EN COURS DE DIFFUSION SUR LE NET par Flibustier78
Source avec Zip Source avec une capture UTILISER LES SKINS WINAMP EN VISUAL BASIC (VB6) par PaTaTe
Source avec Zip Source avec une capture FORM XP par NISANDSYSTEMS
Source avec Zip FORME IRREGULIÈRE TUTORIAL par TheSaib

Commentaires et avis

Commentaire de maurice08 le 04/01/2002 12:02:10

Ca être gengen si bien fonctione !
g parasite  dans ce qui doit être transparent !!!
que fais je ???

Commentaire de cyrilp le 11/01/2002 12:16:08

J'adore !

Maintenant, je m'en sers pour toutes les nouvelles app. que je fais, avec un look design !

Pour un code aussi court et pourtant aussi puissant, je met tout simplement 10/10 !

A++

Commentaire de cyrilp le 11/01/2002 12:18:12

Euuuuuuh...
Je voulais noter le code (j'avais en + l'intention de mettre de 10) mais je trouve pas l'onglet "Donner une note"... Hey Nix, why ????

A++

Commentaire de Ouneufe le 14/01/2002 00:39:50

Ce code est très bon. Le seul souci c'est le temps qu'il faut à la machine pour calculer le skin à chaque démarrage (pixel par pixel). G remédié au problème( reste + qu'à faire un OCX).

Commentaire de OzStriker59 le 24/02/2002 13:53:44

J'ai fait un copier-coller dans VB 6 mais rien ne se passe ! Faut-il ajouter autre chose  ?

Commentaire de lous le 06/03/2002 09:33:20

Il est super celui la rapide et il deconne pas avec certains pixel...
J'avais ca avec les autres les decoupes malfaites...
20/10 heeeu 10/10 =))

Commentaire de Tito le 12/04/2002 00:07:26

pas mal, on peut améliorer l'effet en elargissant la plage de couleur qui va servir à la transparance (cela supprime les "taches") :
remplacer:
If GetPixel(hDC, X, Y) = TransparentColor Or X = PicWidth Then
par:
If (GetPixel(hDC, X, Y) < TransparentColor + lngFeather And GetPixel(hDC, X, Y) > TransparentColor - lngFeather) Or X = PicWidth Then

ou lngFeather est un LONG définissant la couleur de transparance (en général =RGB(255,255,255) pour faire disparaitre un fond blanc)

Commentaire de Chris_Thal le 11/07/2002 23:41:49

Je te remercie, ce code m'a beaucoup aidé, mais j'ai relevé une petite erreur dans le code:
il est écrit
     If GetPixel(hDC, X, Y) = TransparentColor Or X = PicWidth Then
alors qu'il faudrait
     If GetPixel(hDC, X, Y) = TransparentColor Or X = PicWidth - 1 Then

Effectivement, X n'atteint jamais X = PicWidth... Tu remarqueras que ça change le résultat dans ton exemple (apparition du damier blanc du fond de l'image).

Commentaire de Benj1105 le 23/07/2002 10:12:49

Ca marche aps chez moi :( la découpe est très mal faite (ca me coupe la moitié de l image je sais pas pourquoi)

Commentaire de Tilois le 04/08/2002 09:26:32

C'est trop bon ca comme source !!

Commentaire de Moria le 27/08/2002 11:05:43

Dans : Private Sub Form_Load()
Rajoute : Form1.ShowInTaskbar = True

Voila :)

Commentaire de Nerdz le 27/08/2002 20:54:53

Pk est-ce que sa coupe en plein milieu de mon image ?
Sinon c super
Bravo

Commentaire de Bioacide le 12/09/2002 21:04:04

Sur un fond noir c'est laid

Commentaire de Zog2002 le 14/12/2002 11:54:32

Il faut laisser une bordure de la couleur coulue transparente tout autour de l'image, autrement dit, le dessin ne doit pas toucher le bord du BMP et ça marche impec....

Commentaire de Berenger le 07/02/2003 22:00:03

Génial jusque là, j'utilisait un code d'une centaine de lignes pour faire la meme chose.
J'en de mande plus : Quelqu'un connait-il un système d'anti-crénelage pour le bord d'une fenêtre redessinée (Comme WinAmp 3) ?
C quand meme génial alors je te met 10/10 :)

Commentaire de Mémère le 29/03/2003 18:55:30 administrateur CS

Ne marche pas quand on change l'image chez moi, ça fait n'importe quoi, des zone qui disparaissent, d'autres qui devrait et qui ne le font pas.

Commentaire de Mémère le 29/03/2003 18:58:05 administrateur CS

Marche grace au commentaire de Zog2002

Commentaire de bluelive le 28/04/2003 22:40:16

Quelqu'un peut-il me dire s'il a trouvé le moyen de redimensionner après le picturebox par ex en affectant une zone précise du picturebox (disons coin inférieur droit) pour le redim..?

Commentaire de lenassim le 12/05/2003 10:37:10

C'est  tres bien continu

Commentaire de Noiretulipe le 18/05/2003 18:48:02

C vrai que sur un fond noir c pas beau du tout !!!
beurk, beurk, beurk ....
sinon, rien d'autre à dire !

Commentaire de Noiretulipe le 18/05/2003 18:50:08

g changé l'image et non, plus se coté pa bo ... Rien que du bonheur !!!
lol
Très bon prog !

Commentaire de paline le 05/06/2003 18:02:46

Vraiment excellent.
J'i remarqué que les lignes qui ne commencent pas par la couleur de transparence déconnent un peu mais c'est génial
10/10

Commentaire de jefftabasco le 30/06/2003 06:42:57

Par hasard qq c comment adapter ce code en .NET ?

Commentaire de ICIoBRa le 04/07/2003 22:55:03

Bravo et merciàa Chris_Thal qui est le seul a avoir trouvé le grand bug de cette source !

Commentaire de Xav88 le 27/12/2003 18:11:10

Ba chez moi ça marche pas. J'ai des vagues blanches autour de l'image (l'image du zip).
Je comprends pas, si quelqu'un peut m'aider......

Xav

Commentaire de Xav88 le 27/12/2003 18:22:14

Ca marche ou presque:
Après avoir testé la modification de Chris_Thal je n'ai plus de vagues mais des points qui correspondent aux points sur l'image mais quand je les supprime en mettant un fond bien blanc j'ai le même problème. Bouuuuouuu

Sinon ça à l'air bien

Xav

Commentaire de Xav88 le 27/12/2003 18:45:49

C'est bon là ça marche à 100%. Bravo Bravo Bravo et 10/10!!!!!!!

Xav

Commentaire de dionysos6868 le 11/01/2004 10:19:30

Super taff je vais tester ca.........

ca va donner une super loc a programme ca merci

Commentaire de SkYsO le 03/02/2004 14:31:49

Salut à tous

Ca marche vraiment pas mal tout ca :)

Par contre le temps de calcul est vraiment super long suivant l'image utilisée.
Quelqu'un aurait il une solution d'optimisation du code ?
Car bon je ne peux changer la taille de l'image

merci :)

Commentaire de Guygz le 12/06/2004 15:44:36

FAT !
Enormous !
Gigantesk !

Commentaire de Prog1001 le 15/07/2004 16:33:42

C'est tous ce que je recherchais
Merveilleux
fantastique code !!
10/10

Commentaire de claudenduaya le 31/07/2004 17:21:54

vraiment cool;

10/10 et sur tout avec les image au format  bmp

Commentaire de AsselusBorealiss le 18/11/2004 23:08:12

Salut  a tous
pour l'exemple ( vu la date du 1er post  )

a la place de :

  LineRegion = CreateRectRgn(StartLineX, Y, X, Y + 1)

remplacer par


LineRegion = CreateRectRgn(StartLineX + 1, Y, X, Y + 1)

et hop plus aucune trace ...reste que les lettres

a+
Assel

10/10 cool code

Commentaire de SkyRocKo le 18/03/2005 22:35:01

Hello !

10/10,  Vraiment excellent !!!

Que dire de plus, un truc pas mal serait de rajouter un paramètre optionnel : un seuil de tolérence en pourcentage pour les couleur, mais bon, c'est déjà super bien :)

Bonne continuation

++

Commentaire de jnbrunet le 06/07/2006 07:01:38

Salut,
ca marche très bien! seulement, il découte seulement autour de mon image...et j'ai un rectangle au milieu de l'image donc j'aimerai rendre transparent....et pourtant il est de la meme couleur que les contours qui ont été découpé...pourquoi n'est-il pas découpé?

Merci
Jn

Commentaire de fabulofr le 02/12/2006 22:08:50

Superbe, merci ^^
10/10 sans probleme ca marche impec' !!

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

image de fond d'une form [ par oniros ] Bonjour,J'affiche une feuille munie d'une image de fond (propriété Picture)Comment faire pour que cette image soit automatiquement à la taille de lafe j'ai vraiment besoin d'aide!! [ par bidules ] Slt a Tous,Je bosse actuellement sur un projet et un probleme se pose a moi.Un probleme qui serait facile de resoudre si je savais creer dynamiquement Click et répéter l'image a chaque click Help j'ai déjà essayer quelques chose mais ça pas marcher... [ par ATH|500| ] Bon moi je veux qu'a chaque click de souris exemple une image1 qui est un trou de bal de fusil exemple se répéte a chaque fois que je fais un mousedow Enregistrer La form en image ex:.Bmp [ par MEGATRIX ] Comment puis enregistrer ce que j'ai déssiner sur ma form dans un fichier Image.Merci picture d'une form mdi [ par daerlnaxe ] oui ben je dois avoir le chic pour trouver les trucs pas possibles moi....bon alors j'affiche une image en fond de ma mdi et comme de bien entendu cel help help help! [ par jnreyt ] j'ai besoin d'aide,je voudrais savoir quel est le code pour créer une zone image automatiquement (je sais le faire ss probleme avec visual studio, je Creer un element (image, listbox) dans une Form a partir d'un code [ par djulian880 ] Connaissant n, j'ai besoin de creer n nouvelles images dans une form, pour en modifier les parametres par la suite. Je vais pas creer 999 images et ca SetWindowRgn help [ par MrDogbert ] Voici mon probleme:Pour "decouper" une form suivant des contours irréguliers j utilise SetWindowRgn, ca pas de prob MAIS pour definir la zone a lui af deplacement image ds form(a la souris) [ par pcpunch ] sltje cherche a faire bouger a l aide de la souris un controle image qui se trouve sur ma form? comment faire afin de ne pas utiliser des boutons de d image dans une form [ par SkylandeR ] J'aimerais mettre une image en mosaique au fond d'un form (sans utiliser ni imagebox ni picturebox). Thanks


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,983 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales