Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

DÉFORMER UNE IMAGE, FAIRE DES VAGUES (SIN) (UPDATED)


Information sur la source

Catégorie :Graphique Classé sous : deformation, vague, setpixel, getpixel, effet Niveau : Débutant Date de création : 15/01/2005 Date de mise à jour : 12/01/2006 02:07:08 Vu / téléchargé: 15 355 / 561

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (13)
Ajouter un commentaire et/ou une note


Description

Cliquez pour voir la capture en taille normale
C'est simplement un code très simple pour simplement déformer de façon simple une simple image BMP. La simple utilisation du simple opérateur SIN permet d'obtenir simplement une image qui fait des simples vagues.

J'avais simplement rien à faire et j'étais tout simplement trop lâche pour brancher mon 2ème PC.
 

Source

  • Private Declare Function SetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal crColor As Long) As Long
  • Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long
  • Public Function DeformerEnSin(ImageSrc As PictureBox, ImageDest As PictureBox, Deforme_X As Boolean, Deforme_Y As Boolean _
  • , AmplitudeX As Long, AmplitudeY As Long, PeriodeX As Long, PeriodeY As Long)
  • Dim X As Long, Y As Long
  • Dim aX As Long, aY As Long
  • ImageDest.Cls
  • ImageDest.Width = ImageSrc.Width + IIf(Deforme_X, AmplitudeX * 2, 0)
  • ImageDest.Height = ImageSrc.Height + IIf(Deforme_Y, AmplitudeY * 2, 0)
  • For X = 0 To ImageSrc.ScaleWidth
  • For Y = 0 To ImageSrc.ScaleHeight
  • aX = IIf(Deforme_X, Sin(Y / PeriodeX) * AmplitudeX + AmplitudeX, 0)
  • aY = IIf(Deforme_Y, Sin(X / PeriodeY) * AmplitudeY + AmplitudeY, 0)
  • SetPixel ImageDest.hdc, X + aX, Y + aY, GetPixel(ImageSrc.hdc, X, Y)
  • Next Y
  • Next X
  • End Function
Private Declare Function SetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal crColor As Long) As Long
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long

Public Function DeformerEnSin(ImageSrc As PictureBox, ImageDest As PictureBox, Deforme_X As Boolean, Deforme_Y As Boolean _
, AmplitudeX As Long, AmplitudeY As Long, PeriodeX As Long, PeriodeY As Long)

    Dim X As Long, Y As Long
    Dim aX As Long, aY As Long
    
    ImageDest.Cls
    ImageDest.Width = ImageSrc.Width + IIf(Deforme_X, AmplitudeX * 2, 0)
    ImageDest.Height = ImageSrc.Height + IIf(Deforme_Y, AmplitudeY * 2, 0)
    
    For X = 0 To ImageSrc.ScaleWidth
        For Y = 0 To ImageSrc.ScaleHeight
        
            aX = IIf(Deforme_X, Sin(Y / PeriodeX) * AmplitudeX + AmplitudeX, 0)
            aY = IIf(Deforme_Y, Sin(X / PeriodeY) * AmplitudeY + AmplitudeY, 0)
            
            SetPixel ImageDest.hdc, X + aX, Y + aY, GetPixel(ImageSrc.hdc, X, Y)
        Next Y
    Next X
End Function

Conclusion

C'est assez simple ?
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

15 janvier 2005 07:08:24 :
15 janvier 2005 20:44:16 :
Il est maintenant 5x plus rapide.
12 janvier 2006 02:07:08 :
Mot clef

Commentaires et avis

signaler à un administrateur
Commentaire de DARKSIDIOUS le 15/01/2005 09:11:50 administrateur CS

Ouais, c'est assez original, fallait y penser.

Dommage que tu utilise les fonctions VB pour faire ton tracé car elles sont très lentes : sur une image plus grande, il vaut mieux utiliser les fonctions de l'API, ou ma classe de gestion d'image pour avoir bien plus de rapidité.

Tu aurais également pu mettre ton code directement sur le site sans devoir télécharger le zip car il est vraiment court.

8/10 pour l'idée originale et à cause de ces quelques remarques ;)

DarK Sidious

signaler à un administrateur
Commentaire de ennixo le 15/01/2005 09:51:03

pas mal, il manque juste un anticrénelage qui, je pense mettra fin au moirage étrange provoqué par ta déformation.

cependant 8/10 aussi =)

signaler à un administrateur
Commentaire de fg85 le 15/01/2005 10:41:05

"8/10 pour l'idée originale et à cause de ces quelques remarques ;)" comme DarK Sidious !! +1.

------------------------------
http://fg.logiciel.free.fr

signaler à un administrateur
Commentaire de madbob le 15/01/2005 11:33:51

salut et merci, grâce à toi j'ai encore appris quelque chose !

C'est tout con et ça met en evidence un aspect des propriétés des objets pictures que je connaissai pas et comme je m'y interresse :-)

Je t'aurai mis 10 mais j'enlève 1 car rien n'est totalement intuitif dans une interface et encore 1, car un commentaire n'est jamais de trop. Hors bien souvent plus le code est compressé plus le commentaire est util.

Donc 8 au grooooooooos fénéant :-))) qui mérite tout à fait un poil d'encouragement

Amicalement
madbob

Ps : je vais très certainnement  m'intéresser à ta classe de gestion d'image Darksidious dèsque j'aurai un peu de temps libre

signaler à un administrateur
Commentaire de DARKSIDIOUS le 15/01/2005 11:42:21 administrateur CS

madbob : je reste à ta disposition pour t'expliquer comment utiliser ma classe, mais je pense qu'avec les commentaires que j'ai pu y mettre, tu n'auras pas trop de mal à comprendre son fonctionnement ;)

DarK Sidious

signaler à un administrateur
Commentaire de madbob le 15/01/2005 12:07:15

Dark Sidious: C'est du code trés compressé alors ;-)))...
Je plaisante bien sûr, car je suis très sensible à ton soutien à la foi spontané et confiant dans mes aptitudes.
A bientôt
madbob

signaler à un administrateur
Commentaire de max12 le 15/01/2005 19:59:45 administrateur CS

Merci, jamais j'aurais penser que ce code suciterais le moindre intérêt. Sinon je connais la méthode des API mais ça fonctionne pas, pourtant avant je le faisais et ça fonctionnait. C'est peut-être dû à Windows XP ou un truc que j'oublie toujours. Sinon qu'est-ce qu'elle fait plus exactement ta classe Darksidious ? (Si elle est sur le site je vais voir après avoir taper ce commentaire et avoir pris une douche :P)

@+

signaler à un administrateur
Commentaire de max12 le 15/01/2005 20:02:59 administrateur CS

Je pensais que les seuls commentaires que j'aurais ce serais concernant la petite blague du simplement, je crois que je vais l'améliorer un peut et trouver autre chose.

signaler à un administrateur
Commentaire de DARKSIDIOUS le 15/01/2005 20:38:23 administrateur CS

Ma classe permet d'accèlérer le traitement graphique : environ 35 fois plus rapides que les fonctions VB, et 30 fois plus rapide que les API GetPixel/SetPixel classiques !

Il s'agit d'une classe écrit en VB et qui se base sur les tableaux de bits récupèrés avec la fonctions de l'API GetDIBits, ensuite, tout les traitements se font sur le tableau, et non sur l'image, d'où un gain en rapidité !

Elle est sur ce site, tu pourras la trouver facilement dans mes sources.

DarK Sidious

signaler à un administrateur
Commentaire de max12 le 15/01/2005 22:34:35 administrateur CS

J'ai regarder ta source, intéressant elle semble bien remplir ses promesses. C'est une bonne chose que tu l'es spécifier dans les commentaires. Surtout pour ceux qui ont l'intention de créer un programme de retouche d'image.

@+

signaler à un administrateur
Commentaire de madbob le 15/01/2005 22:52:00

max12 c'est une bonne chose que tu retrousses un peu tes manches :-))).  
Moi je me garde la librairie de DarkSidious comme cerise sur le gateau pour lundi j'espère, si j'ai fini le nouveau prog que je veux mettre en ligne...
Dans le kaleidoscope (en ligne sur ce site) j'utilise quelques API dont  getbitmapbits et setbitmapbits pour obtenir et manipuler les tableaux des bmp 32bits et mon OS c'est XP et ça fonctionne trés bien ?!?.

A+ pour de nouvelles aventures alors...
madbob

signaler à un administrateur
Commentaire de ennixo le 16/01/2005 00:20:24

si je peux me permettre, tu peux optimiser encore ton code en remplaçant les IIf à l'intérieur de la boucle par des If à l'extérieur de la boucle. tu aurais plus de code (3 fois le code de la boucle sans les IIf) mais ça n'évaluerais qu'une seule fois Deforme_X et Deforme_Y, il y aurait donc beaucoup moins d'instructions effectuées.

de plus, meme si IIf est parfois un raccourci il ne faut pas oublier qu'il évalue les 2 possibilités à chaque fois... ça signifie que quand tu lui dis ça :
aX = IIf(Deforme_X, Sin(Y / PeriodeX) * AmplitudeX + AmplitudeX, 0)
meme si Deforme_X est faux, il va te retourner 0 mais il va quand meme faire le calcul Sin(Y / PeriodeX) * AmplitudeX + AmplitudeX

=)

signaler à un administrateur
Commentaire de madbob le 16/01/2005 10:54:35

:) ennixo : Je trouve ta reflexion très pertinente surtout pour les nons matheux (div par 0), ce qui conduirait à une erreur pas forcément facile à comprendre. Il suffit de saisir une période nulle pour y parvenir... Or, le cas des images s'y prete car les bornes des boucles sont souvent importantes.

L'esthétique en terme de compression algorythmique  n'est pas une nécessairrement une recherche de performence en terme d'exécution. Par contre c'en est une en cas de contrainte matériel forte comme les ressources mémoires physiques disponibles.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

EFFET DE VAGUE PAR SCRIPT (PARAMETRABLE) de blackwizzard [ par ced74 ] Bonjour, j'ai recupere le code de blackwizzard ici :http://www.flashkod.com/code.aspx?ID=18723Il permet de faire un effet de vague..par contre j'ai u EFFET DE VAGUE PAR SCRIPT (PARAMETRABLE) de blackwizzard [ par ced74 ] Bonjour, j'ai recupere le code de blackwizzard ici :http://www.flashkod.com/code.aspx?ID=18723Il permet de faire un effet de vague..par contre j'ai u EFFET DE VAGUE PAR SCRIPT (PARAMETRABLE) de blackwizzard [ par ced74 ] Bonjour, j'ai recupere le code de blackwizzard ici :http://www.flashkod.com/code.aspx?ID=18723Il permet de faire un effet de vague..par contre j'ai u Effet de vague [ par ced74 ] Bonjour, j'ai recupere le code de blackwizzard ici :http://www.flashkod.com/code.aspx?ID=18723Il permet de faire un effet de vague..par contre j'ai u Effet de vague [ par ced74 ] Bonjour, j'ai recupere le code de blackwizzard ici :http://www.flashkod.com/code.aspx?ID=18723Il permet de faire un effet de vague..par contre j'ai u Effet de vague [ par ced74 ] Bonjour, j'ai recupere le code de blackwizzard ici :http://www.flashkod.com/code.aspx?ID=18723Il permet de faire un effet de vague..par contre j'ai u Effet de vague [ par ced74 ] Bonjour, j'ai recupere le code de blackwizzard ici :http://www.flashkod.com/code.aspx?ID=18723Il permet de faire un effet de vague..par contre j'ai u Couleur SetPixel différente de couleure GetPixel sous Windows 2000 [ par cushy007 ] Couleur SetPixel différente de couleure GetPixel sous Windows 2000 [ par cushy007 ] Salut, J'ai un problème sous Windows 2000 avec les couleurs des API SetPixel et GetPixel. La couleur que me renvoie GetPixel est différente GetPixel et SetPixel [ par MoiDebutantVB ] Je me rapelle avoir vu une source .Net qui utilisait GetPixel et Set Pixel ainsi qu'une Api et une autre méthode pour remplacer une couleur d'une bitm


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,671 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.