Traduction du code Morse avec Aspose.Font | .NET
Traduction du code Morse avec Aspose.Font pour .NET
Qu’est-ce que la traduction en code Morse ?
Il s’agit d’une fonctionnalité qui vous permet :
| Objectif | Fonctionnement |
|---|---|
| Encoder du texte brut en glyphes de code Morse d’une police (ou d’une image bitmap) | IFontMorseEncoder convertit les caractères en une séquence de symboles point (.) et tiret (-) et les associe aux identifiants de glyphes de l’IFont fournie. |
| Décoder une chaîne Morse en texte lisible | IMorseDecoder renvoie du texte brut ; IFontMorseDecoder renvoie des identifiants de glyphes ou un flux PNG avec une police fournie. |
| Rendre du texte en code Morse au format PNG | Les surcharges de rendu acceptent une police, sa taille, l’interligne et la largeur maximale, et renvoient un flux PNG. |
La fonctionnalité a été introduite dans Aspose.Fontfor.NET23.10 (FONTNET‑602 – Prise en charge de l’encodage du code Morse).
Pourquoi l’utiliser ?
- Solution Pure‑C# – pas de bibliothèques externes, pas de dépendances au niveau du système d’exploitation.
- Fonctionne avec n’importe quelle police contenant les glyphes requis (TrueType, OpenType, CFF…).
- L’heuristique intégrée sélectionne automatiquement le alphabet correct (latin, grec, cyrillique, etc.) lorsque vous l’omettez.
- Texte → identifiants de glyphes (pour les traitements de rendu personnalisés) et texte → PNG Morse sont disponibles.
- Entièrement couvert par le support d’Aspose (forums, docs, démo live).
Commencer
1 Installez le package NuGet
1dotnet add package Aspose.Font2 Ajouter des espaces de noms (C#)
1using System;
2using System.IO;
3using System.Linq;
4using Aspose.Font;
5using Aspose.Font.Factories;
6using Aspose.Font.Glyphs;
7using Aspose.Font.Renderers;
8using Aspose.Font.Sources;
9using Aspose.Font.TextUtils;Présentation de l’API
1 Usine – point d’entrée
Créez une instance de TextUtilsFactory avec new TextUtilsFactory(), puis appelez ses méthodes d’instance :
| Méthode | Valeur de retour | Description |
|---|---|---|
GetFontMorseEncoder() | IFontMorseEncoder | Encode du texte en identifiants de glyphes ou en flux PNG avec une police fournie |
GetMorseEncoder() | IMorseEncoder | Encode du texte en chaîne Morse sans police |
GetFontMorseDecoder() | IFontMorseDecoder | Décode du Morse en identifiants de glyphes ou en flux PNG avec une police fournie |
GetMorseDecoder() | IMorseDecoder | Décode une chaîne Morse en texte brut sans police |
L’usine réside dans Aspose.Font.Factories.TextUtilsFactory (ajouté dans 23.10).
2 interfaces principales
IFontMorseEncoder
Les surcharges de glyphes renvoient GlyphId[]. Les surcharges de rendu renvoient un Stream PNG que l’appelant doit libérer après l’avoir copié ou utilisé.
| Résultat | Paramètres |
|---|---|
GlyphId[] | Texte et instance IFont, avec détection automatique de l’alphabet ou valeur MorseAlphabets explicite |
PNG Stream | Texte, instance IFont, fontSize, RenderingUtils.LineSpacingType, lineSpacingValue et maxWidth ; une autre surcharge permet de préciser l’alphabet |
LineSpacingType prend en charge Pixels et PercentOfFontHeight. Le moteur de rendu calcule la hauteur de l’image ; aucun paramètre ne définit une hauteur fixe.
Les caractères facultatifs inputSeparator et outputSeparator délimitent les mots. Pour l’encodage, ils valent par défaut un espace et /, respectivement. Ils ne remplacent pas les points et tirets du code Morse.
IFontMorseDecoder
IFontMorseDecoder accepte une chaîne Morse, une police et une valeur MorseAlphabets explicite. Il renvoie GlyphId[] pour le texte décodé, ou un Stream PNG lorsque des paramètres de rendu sont fournis. Il ne renvoie pas de texte brut.
Utilisez IMorseDecoder pour obtenir une string décodée sans charger de police. Pour le décodage, inputSeparator vaut par défaut / et outputSeparator vaut un espace.
IMorseEncoder / IMorseDecoder
Ceux-ci fonctionnent uniquement avec des chaînes brutes (aucune police impliquée). Utilisez-les lorsque vous n’avez besoin que de séquences « points-traits ».
3 Énumération de support – MorseAlphabets
| Valeur | Script |
|---|---|
Latin | Anglais et la plupart des langues occidentales |
Greek | Lettres grecques |
Cyrillic | Russe, Bulgare, etc. |
Hébreu | Lettres hébraïques |
Arabe | Écriture arabe |
Portugais | Symboles spécifiques au portugais |
Kurde | Lettres kurdes |
Persan | Lettres persanes/farsi |
Si vous omettez l’énumération, l’encodeur tente une détection automatique.
Exemples pratiques
Les exemples utilisant une police emploient TTF/LatoWeb-Regular.ttf. Définissez DataDir sur le répertoire contenant le dossier TTF et OutputDir sur un répertoire de sortie existant. Le décodage en texte brut ne nécessite pas de police.
- Encoder en identifiants de glyphes
1// Encode text as Morse-code glyph identifiers
2
3// Load a font containing the Morse-code symbols.
4string fontPath = Path.Combine(DataDir, "TTF", "LatoWeb-Regular.ttf");
5Font font = Font.Open(new FontDefinition(
6 FontType.TTF, "ttf", new FileSystemStreamSource(fontPath)));
7
8// Create the factory and get the font encoder.
9var factory = new TextUtilsFactory();
10IFontMorseEncoder encoder = factory.GetFontMorseEncoder();
11
12// Encode HELLO WORLD using automatic alphabet detection.
13GlyphId[] glyphIds = encoder.Encode("HELLO WORLD", font);
14Console.WriteLine(string.Join(", ", glyphIds.Select(id => id.ToString())));Résultat : un tableau d’objets GlyphId représentant les symboles Morse, utilisable dans des traitements de dessin personnalisés.
- Encoder et restituer un PNG
Ce fragment réutilise font et encoder de l’exemple précédent. Il enregistre morse.png dans OutputDir.
1// Encode text as Morse code and save a PNG
2
3double fontSize = 48;
4var spacing = RenderingUtils.LineSpacingType.Pixels;
5int lineSpacing = 10;
6int maxWidth = 800;
7
8// The renderer returns a stream and determines the image height.
9using (Stream pngStream = encoder.Encode(
10 "SOS HELP", font, fontSize, spacing, lineSpacing, maxWidth))
11{
12 if (pngStream.CanSeek)
13 pngStream.Position = 0;
14
15 using (FileStream output = File.Create(Path.Combine(OutputDir, "morse.png")))
16 {
17 pngStream.CopyTo(output);
18 }
19}Le PNG représente le code Morse avec les glyphes de point (.) et de tiret (-) de la police. Les paramètres de caractères contrôlent les séparateurs de mots, pas des symboles de point ou de tiret alternatifs.
- Décoder en texte brut
1// Decode a Morse-code string to plain text
2
3// Plain-text decoding does not require a font.
4IMorseDecoder decoder = new TextUtilsFactory().GetMorseDecoder();
5string morse = "... --- ...";
6string result = decoder.Decode(morse, MorseAlphabets.Latin);
7Console.WriteLine(result); // SOSLorsqu’un alphabet personnalisé a été utilisé lors de l’encodage, transmettez la même valeur « MorseAlphabets » au décodeur.
- Exemple combiné (C#)
1// Render Morse code, obtain glyph identifiers and decode a message
2
3// Load a font.
4string fontPath = Path.Combine(DataDir, "TTF", "LatoWeb-Regular.ttf");
5Font font = Font.Open(new FontDefinition(
6 FontType.TTF, "ttf", new FileSystemStreamSource(fontPath)));
7
8var factory = new TextUtilsFactory();
9IFontMorseEncoder encoder = factory.GetFontMorseEncoder();
10IMorseDecoder decoder = factory.GetMorseDecoder();
11const string message = "CALL ME AT 5PM";
12
13// Encode to PNG. Height is calculated by the renderer.
14using (Stream pngStream = encoder.Encode(
15 message, font,
16 fontSize: 36,
17 lineSpacingType: RenderingUtils.LineSpacingType.Pixels,
18 lineSpacingValue: 10,
19 maxWidth: 900))
20{
21 if (pngStream.CanSeek)
22 pngStream.Position = 0;
23
24 using (FileStream output = File.Create(Path.Combine(OutputDir, "callme.png")))
25 {
26 pngStream.CopyTo(output);
27 }
28}
29Console.WriteLine("PNG created.");
30
31// Encode to glyph identifiers.
32GlyphId[] ids = encoder.Encode(message, font);
33Console.WriteLine("Glyph IDs: " + string.Join(", ", ids.Select(id => id.ToString())));
34
35// Decode a plain Morse string.
36string morse = "... --- ...";
37string decoded = decoder.Decode(morse, MorseAlphabets.Latin);
38Console.WriteLine($"Decoded '{morse}' -> {decoded}");L’exemple combiné enregistre callme.png dans OutputDir, affiche les identifiants de glyphes encodés et décode ... --- ... en SOS. Utilisez les espaces de noms et la configuration des répertoires indiqués ci-dessus.
Démo en ligne
Aspose propose une démo Web gratuite pour essayer le traducteur sans rien installer :
Caractéristiques de la démo :
- Texte ↔︎ Morse ↔︎ Rendu des glyphes
- Choisissez des caractères point/tiret personnalisés
- Téléchargez le PNG généré ou affichez les identifiants des glyphes
Notes de version
Aspose.Font pour .NET 23.10 API ajoutées :
TextUtilsFactory,IFontMorseEncoder,IFontMorseDecoder,IMorseEncoder,IMorseDecoder, énumérationMorseAlphabets. Nouvelle fonctionnalité : « Prise en charge de l’encodage en code Morse ».
Quand utiliser quelle surcharge
| Situation | Surcharge recommandée |
|---|---|
| Identifiants des glyphes uniquement nécessaires pour la suite du traitement | Encode(string text, IFont font) (ou avec un alphabet explicite) |
| Obtenir un flux PNG sans gérer le code de rendu | Utilisez la surcharge avec fontSize, lineSpacingType, lineSpacingValue et maxWidth |
| Séparateurs de mots personnalisés | Définissez inputSeparator et outputSeparator ; ces paramètres ne modifient pas les points et tirets |
| La langue source utilise un alphabet non latin et la détection automatique échoue | Spécifiez explicitement la valeur appropriée de MorseAlphabets |
Résumé
Aspose.Font inclut désormais un moteur complet de traduction de code Morse qui fonctionne à la fois au niveau glyphe et au niveau bitmap. Grâce aux méthodes simples d’usine, vous pouvez instantanément commencer à encoder, décoder et restituer du texte dans les alphabets pris en charge sans écrire vos propres tables de mappage ni gérer le rendu de bas niveau.
Que vous construisiez :
- Un composant personnalisé de visualisation du signal
- Un outil pédagogique pour enseigner la communication Morse
- Une étape d’obscurcissement des données qui stocke les informations sous forme de polices stylisées
l’API vous donne un contrôle total tout en gardant le code propre, multiplateforme et entièrement pris en charge.