begin process at 2008 09 05 07:27:14
1 237 090 membres
56 nouveaux aujourd'hui
14 312 membres club

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é: 13 233 / 530

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

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

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

Pub



Appels d'offres

Recherche developpeur ...
Budget : 700€
SITE MARCHAND LOCATION...
Budget : 3 000€
SITE MARCHAND POUR HOTEL
Budget : 4 000€

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Téléchargements

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

Boutique

Boutique de goodies CodeS-SourceS