begin process at 2012 02 17 03:28:38
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

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

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


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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é :19 315 / 634

Auteur : max12

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
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

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


 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

 Sources du même auteur

Source avec Zip Source avec une capture VBFRANCE MESSENGER + SERVEUR, ANCIENNE SOURCE
Source avec Zip Source avec une capture ÉDITEUR HEXADÉCIMAL
Source avec Zip Source avec une capture ÉCRAN DE VEILLE, APERÇU, OPTIONS (SANS DIRECT X) RESSEMBLE U...
Source avec Zip Source avec une capture ANALYSEUR MATHÉMATIQUE
OUVRIR UNE IMAGE BMP SANS API NI FONCTION INTÉGRÉE

 Sources de la même categorie

Source avec Zip Source avec une capture Source .NET (Dotnet) VB10 - CRÉER VOS PROPRES CALQUES SUR UNE IMAGE par Duke49
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

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture IMAGES ET EFFETS HLSL / SHADERS DIRECTX 9 par BumpMANN
Source avec Zip Source avec une capture OPÉRATIONS SUR UNE LISTE D'IMAGES par antho2005
Source avec Zip Source avec une capture EFFET DES VAGUES SUR UNE IMAGE(EFFET) par 4every1
Source avec Zip Source .NET (Dotnet) GETPIXEL TRÈS RAPIDE par ShadowTzu
Source avec Zip Source avec une capture COMPARER 2 IMAGES par max12

Commentaires et avis

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

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 =)

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

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

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

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

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)

@+

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.

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

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.

@+

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

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

=)

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


Nos sponsors


Sondage...

Comparez les prix

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 : 2,402 sec (3)

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