begin process at 2008 07 06 02:46:42
1 205 441 membres
21 nouveaux aujourd'hui
14 119 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 !

CLM'S ASCII ART


Information sur la source

Catégorie :Graphique Classé sous : ascii, art, image, convertir, conversion Niveau : Initié Date de création : 23/06/2006 Date de mise à jour : 27/06/2006 08:05:34 Vu / téléchargé: 6 350 / 677

Note :
9,83 / 10 - par 6 personnes
9,83 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

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

Description

Après un bon moment sans poster, je reviens avec ce petit prog.

Ce n'est pas le programme de l'annèe mais le rendu est pas mal (je trouve).

Donc cette source sert à faire de l'ASCII Art. C'est une maniére de redessiner une image avec des caractères ASCII. Il existe sur le site des sources qui colorent une page HTML remplie de "#" (par exemple) en fonction des couleurs d'une image. Mais ici, c'est différent.

La technique consiste à couper notre image en petits rectangles et à voir si on ne "dépasse" pas en appliquant un caractère sur un des rectangles. Alors je sais ça ne paraît pas clair du tout mais regardez la capture pour vous faire une idée.

Le programme "décode" des images uniquement en noir et blanc. J'ai donc rajouté une petite fonction de conversion pour pouvoir charger une image en couleur et la convertir.

Le traitement est très rapide en compilé car il utilise les API graphiques (merci à Renfield pour ses conseils!!!). Le résultat sera meilleur avec une petite taille de police mais il ne faut pas oublier que la taille par défaut de la police du Bloc-Note de Windows est de 10.

A vos commentaires...
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

23 juin 2006 17:27:15 :
Nouvelle capture
24 juin 2006 14:31:12 :
Choix de la taille de la police
24 juin 2006 15:03:44 :
Encore une nouvelle capture
24 juin 2006 16:59:32 :
Code plus rapide, changement dans l'interface
25 juin 2006 14:51:59 :
...
25 juin 2006 20:48:48 :
Modif fonction de conversion
26 juin 2006 05:19:31 :
Ajout d'exemples
26 juin 2006 18:26:43 :
Traitement revu et corrigé (merci a Renfield)
26 juin 2006 21:20:18 :
J'ai revu complètement l'algo, en compilé c'est quasi instantanné!!!!
26 juin 2006 21:31:28 :
...
26 juin 2006 21:49:49 :
J'ai changé encore deux trois petites choses
26 juin 2006 22:08:51 :
Fonction de conversion inclus dans le traitement
26 juin 2006 23:20:29 :
Amélioration de l'algo
27 juin 2006 00:20:01 :
Accélération de l'algo. Lancez le prog en compilé, ça ira plus vite.
27 juin 2006 03:00:34 :
...
27 juin 2006 06:55:04 :
Nouvelle interface graphique
27 juin 2006 07:19:29 :
Modifications soufflées par Renfield
27 juin 2006 07:37:24 :
Ajout de la barre d'état et suppression du MsgBox de copie
27 juin 2006 08:02:52 :
Ajout des très petites tailles de police
27 juin 2006 08:05:34 :
...
  • signaler à un administrateur
    Commentaire de windob le 23/06/2006 23:32:27

    J'ai pas encore regardé le code mais le rendu sur la capture est vraiment réussi ! Bravo

  • signaler à un administrateur
    Commentaire de MadM@tt le 24/06/2006 02:21:58

    C'est vrai que ça rend joli ;-)

  • signaler à un administrateur
    Commentaire de seb5629 le 24/06/2006 18:23:46

    il est vraiment super ce code!!!

  • signaler à un administrateur
    Commentaire de Renfield le 26/06/2006 10:25:35 administrateur CS

    y'a quelques astuces simple a mettre en oeuvre, our accelerer la chose...

    faire un :
       SetBkMode picSource.hdc, OPAQUE
       SetBkMode picDiff.hdc, OPAQUE

    au début, par exemple (le fond du texte sera opaque, plus besoin d'effacer la zone avant un Print)

    utiliser TextOut picDiff.hdc, 0, 0, ChrW$(lCompteur), 1
    plutot que Print  (faire un .Refresh por visualiser)

    PicZone ne sert a rien...
    BitBlt picDiff.hdc, 0, 0, lWidth, lHeight, picSource.hdc, lX, lY, vbSrcInvert
    suffit

    évite aussi les multiples allocations de sChaines (lors des concaténations)
    utilises un tableau, ou définit la taille de sChaine au début :

    sChaine = Space$((2 + CInt(0.5 + picSource.Width / lWidth)) * CInt(0.5 + picSource.Height / lHeight))

    ensuite :
             nIndex = nIndex + 1
             Mid$(sChaine, nIndex) = ChrW$(lChoix)

  • signaler à un administrateur
    Commentaire de clementio le 26/06/2006 18:28:49 administrateur CS

    Je viens de mettre à jour avec les suggestions de Renfield.

    Ca complique un peu le code mais le traitement est environ 3 à 4 fois plus rapide!!!!

    C'est trop cool, merci à toi Renfield...

  • signaler à un administrateur
    Commentaire de clementio le 26/06/2006 23:22:02 administrateur CS

    J'ai encore accélérer l'algo de traitement!!!

    C'est incroyable la différence avec le début. Je pense que maintenant il sera difficile de faire plus rapide...

  • signaler à un administrateur
    Commentaire de Renfield le 27/06/2006 06:35:41 administrateur CS

    en stockant ton tableau ainsi :
    ReDim tBitCar(lWidth - 1, lHeight - 1, 32 To 255)

    tu pourras faire :
       'On remplit tBitCar en bouclant sur les caratères entre 32 et 255
       For lCompteur = 32 To 255
          'On écrit le caractère sur l'image buffer
          TextOut picBuff.hdc, 0, 0, ChrW$(lCompteur), 1
          'On copie la valeur des pixels dans tBitImage
          GetDIBits picBuff.hdc, picBuff.Image, 0, lHeight, tBitCar(0, 0, lCompteur), bi32BitInfo, DIB_RGB_COLORS
       Next

  • signaler à un administrateur
    Commentaire de Renfield le 27/06/2006 06:55:03 administrateur CS

    belle accéleration ^^

    lors de la conversion NB, tu pourrais t'epargner quelques couteuses lectures de tableau, couteuses en VB :

             For lY2 = 0 To lHeight - 1
                For lX2 = 0 To lWidth - 1
                    lVal = tBitImage(lX2, lY2)
                   lVal = (lVal Mod &HFF) + ((lVal \ &HFF) Mod &HFF) + ((lVal \ &H10000))
                  

    (à noter que j'ai fait : lSeuil = Slider1.Value * 3)

  • signaler à un administrateur
    Commentaire de clementio le 27/06/2006 07:21:29 administrateur CS

    La formule exacte est:

    lVal = (lVal Mod &H100) + ((lVal \ &H100) Mod &H100) + (lVal \ &H10000)

    Merci encore pour ces conseils...

    J'ai mis la source à jour et modifié l'interface pour que ça fasse un peu plus "professionnel".

  • signaler à un administrateur
    Commentaire de _DoOmy_ le 01/08/2006 17:33:51

    Monstrueux, ça marche avec toutes les images?

  • signaler à un administrateur
    Commentaire de Renfield le 01/08/2006 17:44:56 administrateur CS

    et oui ^^

Ajouter un commentaire

Pub



Appels d'offres

Plugin Dialer outlook
Budget : 2 000€
Travail graphique- ill...
Budget : 1 000€
creation de marque et ...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Téléchargements

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

Boutique

Boutique de goodies CodeS-SourceS