Maison  >  Article  >  développement back-end  >  Comment convertir des images en art ASCII à l'aide de C : ajustement basé sur l'intensité ou sur les caractères ?

Comment convertir des images en art ASCII à l'aide de C : ajustement basé sur l'intensité ou sur les caractères ?

DDD
DDDoriginal
2024-11-04 00:07:30415parcourir

How to Convert Images to ASCII Art Using C  : Intensity-Based vs. Character Fitting?

Conversion d'image en art ASCII à l'aide de C

Cette approche utilise des polices à espacement fixe et peut gérer des images en niveaux de gris.

Conversion basée sur l'intensité des pixels/zones (ombrage)

  • Divisez l'image en pixels ou en zones rectangulaires (points).
  • Calculez l'intensité moyenne de l'échelle de gris pour chacun point.
  • Remplacez chaque point par un caractère ayant l'intensité la plus proche.
  • Utilisez une carte de caractères pour associer des caractères à des intensités.
  • L'art ASCII résultant conserve le rapport hauteur/largeur et distribution de l'intensité de l'image originale.

Ajustement des caractères (approche hybride)

Cette méthode tente de faire correspondre les zones de l'image avec des caractères non seulement en fonction de l'intensité mais aussi sur la forme.

  • Divisez l'image en zones rectangulaires avec le même rapport hauteur/largeur que la police cible.
  • Divisez chaque caractère de la police en zones (gauche, droite, haut , bas, centre).
  • Calculez l'intensité de chaque zone de l'image et de la police.
  • Trouvez le caractère qui correspond le mieux à l'intensité et à la forme de la zone de l'image.
  • Le résultat produit un art ASCII visuellement plus agréable avec des polices plus grandes, préservant les détails.

Exemple de code pour l'ajustement des caractères

<code class="c++">class intensity {
    char c;
    int il, ir, iu, id, ic;

    void compute(DWORD **p, int xs, int ys, int xx, int yy) {
        // Compute intensities for left, right, up, down, and center zones
        ...
    }
};

AnsiString bmp2txt_big(Graphics::TBitmap *bmp, TFont *font) {
    // Character sized areas
    ...
}</code>

Comparaison

  • Conversion basée sur l'intensité : Facile à mettre en œuvre, rapide, produit une sortie importante avec un mappage pixel-caractère. Convient aux images plus grandes.
  • Ajustement des caractères : Plus lents, plus complexes, produisent de meilleurs résultats même avec des polices plus grandes. Préserve la forme et les détails des visages et de certaines images complexes.

Conseils

  • Utilisez des polices à pas fixe (par exemple, System) avec un jeu de caractères OEM .
  • Expérimentez avec différentes cartes de caractères et dispositions de zones.
  • Envisagez une intensité inversée, où les pixels noirs ont une valeur maximale, pour un meilleur aperçu du texte sur fond blanc.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn