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 !

ZOOM AMÉLIORE AVEC ANTI-ALIASING


Information sur la source

Catégorie :Graphique Classé sous : amelioration, zoom, antialiasing, pixelisation Niveau : Débutant Date de création : 16/10/2004 Date de mise à jour : 01/11/2004 21:11:25 Vu / téléchargé: 6 578 / 940

Note :
9,75 / 10 - par 4 personnes
9,75 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

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


Description

Cliquez pour voir la capture en taille normale
Je n'ai pas trouvé qu'équivalent sur ce site donc j'en profite pour poster cette source.

Il s'agit de faire un zoom sur une image, mais en essayant d'éviter l'effet de pixélisation qui en resulte. Bien entendu, les pixels affichés ne correspondent pas à un zoom de chaque pixel, mais sont la somme des pixels avoisinant + le pixel courant le tout divisé par 5.

Cela donne un effet de flou, et atténue l'effet de pixélisation.

Pour voir l'effet, regardez la capture : l'image du haut est obtenue grâce à ma méthode, et l'image du bas est obtenue avec la fonction PaintPicture qui étire bêtement les pixels et qui donne au final une image très pixélisée.

J'utilise bien entendu ma classe de gestion d'image pour les manipulations ce qui permet d'obtenir des affichages quasi instantannée.
 

Source

  • Private Sub cmdZoom_Click(Index As Integer)
  • 'déclaration des variables privées
  • Dim oGestionImageSrc As New CGestionImage
  • Dim oGestionImageDest As New CGestionImage
  • Dim iFor1 As Integer 'stocke les valeurs de la boucle For->Next
  • Dim iFor2 As Integer 'stocke les valeurs de la boucle For->Next
  • Dim iZoom As Integer 'stocke le rapport du zoom
  • Dim dZoomIndexX As Double 'stocke l'index du zoom lors du parcours sur X
  • Dim dZoomIndexY As Double 'stocke l'index du zoom lors du parcours sur Y
  • Dim iZoomIndexX As Integer 'stocke l'index entier du zoom lors du parcourt sur X
  • Dim iZoomIndexY As Integer 'stocke l'index entier du zoom lors du parcourt sur Y
  • Dim iBleu As Byte 'stocke la composante bleue à récupèrer
  • Dim iVert As Byte 'stocke la composante verte à récupèrer
  • Dim iRouge As Byte 'stocke la composante rouge à récupèrer
  • Dim iBleuCouleur As Double 'stocke la composante bleue à appliquer
  • Dim iVertCouleur As Double 'stocke la composante verte à appliquer
  • Dim iRougeCouleur As Double 'stocke la composante rouge à appliquer
  • 'on définit le rapport du zoom
  • Let iZoom = Choose(Index, 2, 4, 8)
  • 'on force le picturebox de destination à être de la bonne taille
  • Let pctDest.Width = pctSource.Width * iZoom
  • Let pctDest.Height = pctSource.Height * iZoom
  • Let pctDest2.Width = pctSource.Width * iZoom
  • Let pctDest2.Height = pctSource.Height * iZoom
  • 'on définit les contrôles sources et destination
  • Set oGestionImageSrc.PictureBox = pctSource
  • Set oGestionImageDest.PictureBox = pctDest
  • 'on parcourt les pixels 1 ) 1 et on les agrandit avec une moyenne des pixels alentours
  • For iFor1 = 0 To pctDest.ScaleWidth
  • For iFor2 = 0 To pctDest.ScaleHeight
  • 'on définit l'index du zoom sur X et Y
  • Let dZoomIndexX = iFor1 / iZoom
  • Let dZoomIndexY = iFor2 / iZoom
  • Let iZoomIndexX = dZoomIndexX
  • Let iZoomIndexY = dZoomIndexY
  • 'on définit la couleur du pixel courant à partir de la couleur courante
  • Call oGestionImageSrc.GetPixelRGB(dZoomIndexX, dZoomIndexY, iRouge, iVert, iBleu)
  • Let iBleuCouleur = iBleu * 2
  • Let iVertCouleur = iVert * 2
  • Let iRougeCouleur = iRouge * 2
  • 'mais aussi des couleurs alentours avec moyenne de toutes les couleurs
  • Call oGestionImageSrc.GetPixelRGB(dZoomIndexX - 1, (dZoomIndexY), iRouge, iVert, iBleu)
  • Let iBleuCouleur = iBleuCouleur + (iBleu * ((iZoomIndexX + 1) - dZoomIndexX))
  • Let iVertCouleur = iVertCouleur + (iVert * ((iZoomIndexX + 1) - dZoomIndexX))
  • Let iRougeCouleur = iRougeCouleur + (iRouge * ((iZoomIndexX + 1) - dZoomIndexX))
  • Call oGestionImageSrc.GetPixelRGB(dZoomIndexX + 1, dZoomIndexY, iRouge, iVert, iBleu)
  • Let iBleuCouleur = iBleuCouleur + (iBleu * (dZoomIndexX - iZoomIndexX))
  • Let iVertCouleur = iVertCouleur + (iVert * (dZoomIndexX - iZoomIndexX))
  • Let iRougeCouleur = iRougeCouleur + (iRouge * (dZoomIndexX - iZoomIndexX))
  • Call oGestionImageSrc.GetPixelRGB(dZoomIndexX, dZoomIndexY - 1, iRouge, iVert, iBleu)
  • Let iBleuCouleur = iBleuCouleur + (iBleu * ((iZoomIndexY + 1) - dZoomIndexY))
  • Let iVertCouleur = iVertCouleur + (iVert * ((iZoomIndexY + 1) - dZoomIndexY))
  • Let iRougeCouleur = iRougeCouleur + (iRouge * ((iZoomIndexY + 1) - dZoomIndexY))
  • Call oGestionImageSrc.GetPixelRGB(dZoomIndexX, dZoomIndexY + 1, iRouge, iVert, iBleu)
  • Let iBleuCouleur = iBleuCouleur + (iBleu * (dZoomIndexY - iZoomIndexY))
  • Let iVertCouleur = iVertCouleur + (iVert * (dZoomIndexY - iZoomIndexY))
  • Let iRougeCouleur = iRougeCouleur + (iRouge * (dZoomIndexY - iZoomIndexY))
  • 'on prend aussi en compte les pixels en diagonales en tenant compte de la distance
  • Call oGestionImageSrc.GetPixelRGB(dZoomIndexX - 1, dZoomIndexY - 1, iRouge, iVert, iBleu)
  • Let iBleuCouleur = iBleuCouleur + (iBleu * ((iZoomIndexX + 1) - dZoomIndexX)) * (Sqr(2) / 2)
  • Let iVertCouleur = iVertCouleur + (iVert * ((iZoomIndexX + 1) - dZoomIndexX)) * (Sqr(2) / 2)
  • Let iRougeCouleur = iRougeCouleur + (iRouge * ((iZoomIndexX + 1) - dZoomIndexX)) * (Sqr(2) / 2)
  • Call oGestionImageSrc.GetPixelRGB(dZoomIndexX + 1, dZoomIndexY - 1, iRouge, iVert, iBleu)
  • Let iBleuCouleur = iBleuCouleur + (iBleu * (dZoomIndexX - iZoomIndexX)) * (Sqr(2) / 2)
  • Let iVertCouleur = iVertCouleur + (iVert * (dZoomIndexX - iZoomIndexX)) * (Sqr(2) / 2)
  • Let iRougeCouleur = iRougeCouleur + (iRouge * (dZoomIndexX - iZoomIndexX)) * (Sqr(2) / 2)
  • Call oGestionImageSrc.GetPixelRGB(dZoomIndexX - 1, dZoomIndexY + 1, iRouge, iVert, iBleu)
  • Let iBleuCouleur = iBleuCouleur + (iBleu * ((iZoomIndexY + 1) - dZoomIndexY)) * (Sqr(2) / 2)
  • Let iVertCouleur = iVertCouleur + (iVert * ((iZoomIndexY + 1) - dZoomIndexY)) * (Sqr(2) / 2)
  • Let iRougeCouleur = iRougeCouleur + (iRouge * ((iZoomIndexY + 1) - dZoomIndexY)) * (Sqr(2) / 2)
  • Call oGestionImageSrc.GetPixelRGB(dZoomIndexX + 1, dZoomIndexY + 1, iRouge, iVert, iBleu)
  • Let iBleuCouleur = iBleuCouleur + (iBleu * (dZoomIndexY - iZoomIndexY)) * (Sqr(2) / 2)
  • Let iVertCouleur = iVertCouleur + (iVert * (dZoomIndexY - iZoomIndexY)) * (Sqr(2) / 2)
  • Let iRougeCouleur = iRougeCouleur + (iRouge * (dZoomIndexY - iZoomIndexY)) * (Sqr(2) / 2)
  • Let iBleuCouleur = iBleuCouleur / (4 + Sqr(2))
  • Let iVertCouleur = iVertCouleur / (4 + Sqr(2))
  • Let iRougeCouleur = iRougeCouleur / (4 + Sqr(2))
  • If iBleuCouleur > 255 Then Let iBleuCouleur = 255
  • If iVertCouleur > 255 Then Let iVertCouleur = 255
  • If iRougeCouleur > 255 Then Let iRougeCouleur = 255
  • If iBleuCouleur < 0 Then Let iBleuCouleur = 0
  • If iVertCouleur < 0 Then Let iVertCouleur = 0
  • If iRougeCouleur < 0 Then Let iRougeCouleur = 0
  • Call oGestionImageDest.SetPixelRGB(iFor1, iFor2, iRougeCouleur, iVertCouleur, iBleuCouleur)
  • Next iFor2
  • Next iFor1
  • Call oGestionImageDest.Refresh
  • 'on compare avec Paintpicture :
  • pctDest2.PaintPicture pctSource, 0, 0, pctSource.ScaleWidth * iZoom, pctSource.ScaleHeight * iZoom, 0, 0, pctSource.ScaleWidth, pctSource.ScaleHeight, vbSrcCopy
  • End Sub
Private Sub cmdZoom_Click(Index As Integer)

'déclaration des variables privées
Dim oGestionImageSrc As New CGestionImage
Dim oGestionImageDest As New CGestionImage
Dim iFor1 As Integer 'stocke les valeurs de la boucle For->Next
Dim iFor2 As Integer 'stocke les valeurs de la boucle For->Next
Dim iZoom As Integer 'stocke le rapport du zoom
Dim dZoomIndexX As Double 'stocke l'index du zoom lors du parcours sur X
Dim dZoomIndexY As Double 'stocke l'index du zoom lors du parcours sur Y
Dim iZoomIndexX As Integer 'stocke l'index entier du zoom lors du parcourt sur X
Dim iZoomIndexY As Integer 'stocke l'index entier du zoom lors du parcourt sur Y
Dim iBleu As Byte 'stocke la composante bleue à récupèrer
Dim iVert As Byte 'stocke la composante verte à récupèrer
Dim iRouge As Byte 'stocke la composante rouge à récupèrer
Dim iBleuCouleur As Double 'stocke la composante bleue à appliquer
Dim iVertCouleur As Double 'stocke la composante verte à appliquer
Dim iRougeCouleur As Double 'stocke la composante rouge à appliquer

    'on définit le rapport du zoom
    Let iZoom = Choose(Index, 2, 4, 8)

    'on force le picturebox de destination à être de la bonne taille
    Let pctDest.Width = pctSource.Width * iZoom
    Let pctDest.Height = pctSource.Height * iZoom
    Let pctDest2.Width = pctSource.Width * iZoom
    Let pctDest2.Height = pctSource.Height * iZoom
 
    'on définit les contrôles sources et destination
    Set oGestionImageSrc.PictureBox = pctSource
    Set oGestionImageDest.PictureBox = pctDest

    'on parcourt les pixels 1 ) 1 et on les agrandit avec une moyenne des pixels alentours
    For iFor1 = 0 To pctDest.ScaleWidth
    
        For iFor2 = 0 To pctDest.ScaleHeight
        
            'on définit l'index du zoom sur X et Y
            Let dZoomIndexX = iFor1 / iZoom
            Let dZoomIndexY = iFor2 / iZoom
            Let iZoomIndexX = dZoomIndexX
            Let iZoomIndexY = dZoomIndexY
            
            'on définit la couleur du pixel courant à partir de la couleur courante
            Call oGestionImageSrc.GetPixelRGB(dZoomIndexX, dZoomIndexY, iRouge, iVert, iBleu)
            Let iBleuCouleur = iBleu * 2
            Let iVertCouleur = iVert * 2
            Let iRougeCouleur = iRouge * 2
        
            'mais aussi des couleurs alentours avec moyenne de toutes les couleurs
            Call oGestionImageSrc.GetPixelRGB(dZoomIndexX - 1, (dZoomIndexY), iRouge, iVert, iBleu)
            Let iBleuCouleur = iBleuCouleur + (iBleu * ((iZoomIndexX + 1) - dZoomIndexX))
            Let iVertCouleur = iVertCouleur + (iVert * ((iZoomIndexX + 1) - dZoomIndexX))
            Let iRougeCouleur = iRougeCouleur + (iRouge * ((iZoomIndexX + 1) - dZoomIndexX))
            Call oGestionImageSrc.GetPixelRGB(dZoomIndexX + 1, dZoomIndexY, iRouge, iVert, iBleu)
            Let iBleuCouleur = iBleuCouleur + (iBleu * (dZoomIndexX - iZoomIndexX))
            Let iVertCouleur = iVertCouleur + (iVert * (dZoomIndexX - iZoomIndexX))
            Let iRougeCouleur = iRougeCouleur + (iRouge * (dZoomIndexX - iZoomIndexX))
            Call oGestionImageSrc.GetPixelRGB(dZoomIndexX, dZoomIndexY - 1, iRouge, iVert, iBleu)
            Let iBleuCouleur = iBleuCouleur + (iBleu * ((iZoomIndexY + 1) - dZoomIndexY))
            Let iVertCouleur = iVertCouleur + (iVert * ((iZoomIndexY + 1) - dZoomIndexY))
            Let iRougeCouleur = iRougeCouleur + (iRouge * ((iZoomIndexY + 1) - dZoomIndexY))
            Call oGestionImageSrc.GetPixelRGB(dZoomIndexX, dZoomIndexY + 1, iRouge, iVert, iBleu)
            Let iBleuCouleur = iBleuCouleur + (iBleu * (dZoomIndexY - iZoomIndexY))
            Let iVertCouleur = iVertCouleur + (iVert * (dZoomIndexY - iZoomIndexY))
            Let iRougeCouleur = iRougeCouleur + (iRouge * (dZoomIndexY - iZoomIndexY))

            'on prend aussi en compte les pixels en diagonales en tenant compte de la distance
            Call oGestionImageSrc.GetPixelRGB(dZoomIndexX - 1, dZoomIndexY - 1, iRouge, iVert, iBleu)
            Let iBleuCouleur = iBleuCouleur + (iBleu * ((iZoomIndexX + 1) - dZoomIndexX)) * (Sqr(2) / 2)
            Let iVertCouleur = iVertCouleur + (iVert * ((iZoomIndexX + 1) - dZoomIndexX)) * (Sqr(2) / 2)
            Let iRougeCouleur = iRougeCouleur + (iRouge * ((iZoomIndexX + 1) - dZoomIndexX)) * (Sqr(2) / 2)
            Call oGestionImageSrc.GetPixelRGB(dZoomIndexX + 1, dZoomIndexY - 1, iRouge, iVert, iBleu)
            Let iBleuCouleur = iBleuCouleur + (iBleu * (dZoomIndexX - iZoomIndexX)) * (Sqr(2) / 2)
            Let iVertCouleur = iVertCouleur + (iVert * (dZoomIndexX - iZoomIndexX)) * (Sqr(2) / 2)
            Let iRougeCouleur = iRougeCouleur + (iRouge * (dZoomIndexX - iZoomIndexX)) * (Sqr(2) / 2)
            Call oGestionImageSrc.GetPixelRGB(dZoomIndexX - 1, dZoomIndexY + 1, iRouge, iVert, iBleu)
            Let iBleuCouleur = iBleuCouleur + (iBleu * ((iZoomIndexY + 1) - dZoomIndexY)) * (Sqr(2) / 2)
            Let iVertCouleur = iVertCouleur + (iVert * ((iZoomIndexY + 1) - dZoomIndexY)) * (Sqr(2) / 2)
            Let iRougeCouleur = iRougeCouleur + (iRouge * ((iZoomIndexY + 1) - dZoomIndexY)) * (Sqr(2) / 2)
            Call oGestionImageSrc.GetPixelRGB(dZoomIndexX + 1, dZoomIndexY + 1, iRouge, iVert, iBleu)
            Let iBleuCouleur = iBleuCouleur + (iBleu * (dZoomIndexY - iZoomIndexY)) * (Sqr(2) / 2)
            Let iVertCouleur = iVertCouleur + (iVert * (dZoomIndexY - iZoomIndexY)) * (Sqr(2) / 2)
            Let iRougeCouleur = iRougeCouleur + (iRouge * (dZoomIndexY - iZoomIndexY)) * (Sqr(2) / 2)
            
            Let iBleuCouleur = iBleuCouleur / (4 + Sqr(2))
            Let iVertCouleur = iVertCouleur / (4 + Sqr(2))
            Let iRougeCouleur = iRougeCouleur / (4 + Sqr(2))
            If iBleuCouleur > 255 Then Let iBleuCouleur = 255
            If iVertCouleur > 255 Then Let iVertCouleur = 255
            If iRougeCouleur > 255 Then Let iRougeCouleur = 255
            If iBleuCouleur < 0 Then Let iBleuCouleur = 0
            If iVertCouleur < 0 Then Let iVertCouleur = 0
            If iRougeCouleur < 0 Then Let iRougeCouleur = 0
            
            Call oGestionImageDest.SetPixelRGB(iFor1, iFor2, iRougeCouleur, iVertCouleur, iBleuCouleur)
            
        Next iFor2
        
    Next iFor1
    
    Call oGestionImageDest.Refresh
    
    'on compare avec Paintpicture :
    pctDest2.PaintPicture pctSource, 0, 0, pctSource.ScaleWidth * iZoom, pctSource.ScaleHeight * iZoom, 0, 0, pctSource.ScaleWidth, pctSource.ScaleHeight, vbSrcCopy

End Sub

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

16 octobre 2004 20:17:14 :
01 novembre 2004 21:11:26 :
Mise à jour de la source avec un résultat bien moins crénelé qu'avant. Pour ce faire, la remarque de ennixo m'a inspirée une nouvelle méthode tenant compte de la position des pixels autour du pixel de destination. Merci à toi ennixo ;)

Commentaires et avis

signaler à un administrateur
Commentaire de Saros le 17/10/2004 10:32:57

Let X = Y c'est la même chose que X = Y ?
j'ai jamais vu cette syntaxe :) on en apprend tous les jours...

L'image agrandie avec l'antialiasing est plus grosse, il faudrait la tronquer sur les bords.
Sinon j'ai bien aimé ^^
9/10
Saros

signaler à un administrateur
Commentaire de DARKSIDIOUS le 17/10/2004 16:55:24 administrateur CS

Tout à fait, mettre un Let devant une affectation permet d'optimiser un peu le code d'après le livre VB Hardcore... Mais ce n'est surement pas flagrant ! C'est un héritage du vieux BASIC.

DarK Sidious

signaler à un administrateur
Commentaire de jmlucienvb le 18/10/2004 08:25:40

Et comme cette solution nous ouvre de grands espaces dans un projet qui nous tient à coeur Bravo 10/10

signaler à un administrateur
Commentaire de DeadlyPredator le 19/10/2004 03:53:30

J'ai une grosse question :
Est-ce que le fait d'utiliser Let et Call permet réellement d'optimiser le programme?

signaler à un administrateur
Commentaire de DARKSIDIOUS le 19/10/2004 06:44:32 administrateur CS

Ben perso, je ne vois pas trop de différence, mais d'après VB HardCore (un bouquin), cela permet au compilateur de mieux discerner les appels de fonctions ainsi que les affectations à des valeurs, et donc de lui permettre d'optimiser ces opérations.

Par contre, l'avantage d'utiliser ces mot-clés : cela donne un code plus facile à lire (à mon avis).

DarK Sidious

signaler à un administrateur
Commentaire de jmlucienvb le 19/10/2004 07:42:35

Et ayant en ce moment à lire des codes écrits par Dark je dois dire que cela facilite grandement la compréhension ...

signaler à un administrateur
Commentaire de ennixo le 26/10/2004 18:31:32

pour optimiser un peu plus tu peux utiliser l'opérateur \ au lieu de / quand tu fais des opérations sur des entiers, ça permet de ne pas du tout prendre en compte l'évntuelle virgule du numérateur et du dénominateur et du résultat.

sinon le résultat de ton algo est un peu spé, c'est encore très carré par rapport à un résultat effectué avec photoshop par exemple.

j'avais fait un truc dans ce genre là mais c'était un rééchantillonage bilinéaire (woaw lol).

ça consistait à :
pour chaque pixel de l'image redimensionnée, calculer la position exacte (dans un single) du pixel de l'image originale donc avec une virgule pour le x et le y
et récupérer la couleur de l'image originale avec un algorithme d'anticrènelage.

permet d'obtenir un résultat beaucoup plus satisfaisant et très rapide en utilisant un bon algorithme d'anticrènelage.

si quelqu'un veut plus d'infos la dessus demandez :)

signaler à un administrateur
Commentaire de DARKSIDIOUS le 26/10/2004 19:15:30 administrateur CS

Oui, tout à fait, ton algorithme est sûrement plus optimisée niveau résultat. D'ailleurs, il va falloir que je l'applique pour prendre en compte la position des pixels. Merci pour cette remarque constructive ;)

DarK Sidious

signaler à un administrateur
Commentaire de DARKSIDIOUS le 01/11/2004 21:13:24 administrateur CS

J'ai pris en compte tes remarques ennixo, et voici le résultat : c'est quand même moins crénelé !

Merci à toi.

DarK Sidious

signaler à un administrateur
Commentaire de bilaloch le 03/11/2004 10:37:34

Quelques fois, call est obligatoire. Non?

@+

BILALoch

signaler à un administrateur
Commentaire de bilaloch le 03/11/2004 10:50:57

DarK Sidious, 10/10. Bravo.

@ +

BILALoch

signaler à un administrateur
Commentaire de DARKSIDIOUS le 03/11/2004 10:57:14 administrateur CS

Merci bilaloch, c'est sympa ;)

Sinon, le Call n'est pas obligatoire il me semble. Si on ne l'utilise pas ca ne change rien, mais c'est quand même plus rigoureux.

DarK Sidious

signaler à un administrateur
Commentaire de jmlucienvb le 03/11/2004 11:04:59

Il me semble que le call à une influence sur la continuation du programme...
Ce qui est à la suite de call attend que le sous prog aie terminé pour continuer...
Ceci est vrai en VBA , en Vb suis pas sûr...
JM

signaler à un administrateur
Commentaire de Saros le 03/11/2004 13:11:44

Non, il n'y aucune référence à cela dans la MSDN...
Que l'on fasse
Call X(args)
ou
X args
Le prog attend *toujours* que X aie terminé.
Ca m'étonne que ce ne soit pas le cas en VBA...

signaler à un administrateur
Commentaire de moustachu le 22/12/2004 09:36:26

Bonjour,

Encore une belle démo de ta classe.

J'ai une petite question, peut-être pas très pertinente car je ne me suis pas trop penché sur ton Algo :

Est-il possible d'avoir un anti aliasing plus ou moins "fort" ? Je m'explique : je souhaite appliquer l'antialiasing sans zoom (iZoom = 1) et je trouve que je perds trop de détails sur l'image résiduelle.

Merci et à ++

Moustachu

signaler à un administrateur
Commentaire de DARKSIDIOUS le 22/12/2004 10:02:50 administrateur CS

Oui, c'est possible en modifiant les coefficients de la matrice de calcul de l'antialiasing. Cepandent, je n'ai pas prévu de fonctions pour le faire !

Mais je ne vois pas trop l'intérêt de faire un zoom de 1... ;)

DarK Sidious

signaler à un administrateur
Commentaire de moustachu le 22/12/2004 10:08:07

Un zoom à 1 ? Effectivement, ce n'est pas un Zoom :o)
Je me suis mal exprimé : c'est pour appliquer l'anti aliasing sur une image... sans besoin de l'agrandir. Peut-être existe-t-il d'autres moyens...

Merci de ta réponse

++
Moustachu

signaler à un administrateur
Commentaire de ennixo le 23/12/2004 14:59:10

l'anticrénelage sur une image... sur une bitmap en tt cas c'est compliqué, le programme doit essayer de repérer des formes pour que ce soit efficace, sinon ce sera bizarre et/ou flou... et repérer des formes c'est chaud !!!

signaler à un administrateur
Commentaire de DARKSIDIOUS le 23/12/2004 15:16:24 administrateur CS

Non ce n'est pas si chaud que cà, il faut utiliser une matrice :
1 0 -1
1 0 -1
1 0 -1

Puis une matrice

1 1 1
0 0 0
-1 -1 -1

Cela trace les contours normalement, et ensuite, il faut appliquer un flou sur les pixels des contours pour obtenir de l'antialiasing.

Note : cette source n'utilise pas de l'antialiasing comme mentionné ci-dessus, mais un filtre de flou uniquement car sur une image zoomé, le tracé des contours est loin d'être bon !

DarK Sidious

signaler à un administrateur
Commentaire de ennixo le 24/12/2004 07:30:30

je demande a voir =)

signaler à un administrateur
Commentaire de DARKSIDIOUS le 24/12/2004 09:42:09 administrateur CS

Très bien ennixo, voici la méthode que je t'ai donné appliqué à la même image :

http://www.vbfrance.com/code.aspx?ID=28385

Je pense que ca pourra t'être utile moustachu ;)

DarK Sidious

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Un zoom plus petit que dans la source de Joe Ace (#235) [ par WebMagique ] Peut-on faire un ZOOM plus petitque dans le code exemple de Joe Ace?http://www.vbfrance.com/index.asp?Val=235grand merci... zoom et police [ par sinouhé ] J'ai un richtextbox que je veux redimensionner à la taille écran... facile.Mais je souhaite effectuer un effet zoom du contenu de cet écran... effectu Faire un zoom (tout simplement) [ par Surfin ] Bonjour,Je souhaiterais tout simplement faire un p'tit soft qui permet entre autre de faire un zoom (réglable si possible) d'une petite partie de l'éc Antialiasing [ par CapCaverne ] Salut tout le monde !Est ce que quelqu'un aurait une demo d'un code qui traite l'antialiasing en VB ??Merci d'avance !! zoom fenêtre [ par bast42 ] je cherche à faire un zoom fenêtre sur un MSChart mais je ne sais pas comment on peut faire,j'ai essayé de dessiner une Shape mais elle est dans un pl directx :au secours!!!! [ par lilie ] J'ai un gros pb ; je possède des tutoriaux en directx dont l'un avec un cylindre qui tourne et un jeu de lumière!Lorque je lance mon programme qui n'a Une image dans une picturebox et un zoom de au dessus du curseur dans une autre [ par captaincav ] salou :)bon, j'explique mon probleme, meme si ca va pas etre tres evident huhuvoila, j'ai 2 picturebox, une avec une image dedans (que l'on va appeler zoom sur un data report [ par yayoo ] salut,J'aimerais pouvoir controler le zoom de l'apercu d'un rapport. pour dessiner ce rapport j'utilise un DataReport mais je n'arrive pas à trouver l Zoom [ par sawn77 ] Bonjour!Je voudrais faire une animation et j'aurai besoin de faire un zoom mais je ne sais pas du tout comment faire!!En fait j'ai une scène qui repre Zoom non voulu dans un OLE [ par OrionMelancholy ] J'ai un petit problème bien désagréable, j'ai inclu dans un contrôle OLE une feuille Excel, j'ai tout bien calculé la taille mais un événement extèrie


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

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



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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,343 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é.