Bild-zu-ASCII-Art-Konvertierung mit C
Dieser Ansatz verwendet monoproportionale Schriftarten und kann Graustufenbilder verarbeiten.
Pixel-/Flächenintensitätsbasierte Konvertierung (Schattierung)
- Teilen Sie das Bild in Pixel oder rechteckige Bereiche (Punkte).
- Berechnen Sie die durchschnittliche Graustufenintensität für jeden Punkt.
- Ersetzen Sie jeden Punkt durch ein Zeichen mit der größten Intensität.
- Verwenden Sie eine Zeichentabelle, um Zeichen mit Intensitäten zu verknüpfen.
- Die resultierende ASCII-Grafik behält das Seitenverhältnis und bei Intensitätsverteilung des Originalbildes.
Zeichenanpassung (Hybrid-Ansatz)
Diese Methode versucht, Bereiche im Bild nicht nur anhand der Intensität mit Zeichen abzugleichen aber auch auf die Form.
- Teilen Sie das Bild in rechteckige Bereiche mit demselben Seitenverhältnis wie die Zielschriftart.
- Teilen Sie jedes Zeichen in der Schriftart in Zonen (links, rechts, oben). , unten, Mitte).
- Berechnen Sie die Intensität für jede Zone im Bild und in der Schriftart.
- Finden Sie das Zeichen, das am besten zur Intensität und Form des Bildbereichs passt.
- Das Ergebnis ist eine optisch ansprechendere ASCII-Grafik mit größeren Schriftarten, wobei Details erhalten bleiben.
Beispielcode für die Zeichenanpassung
<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>
Vergleich
-
Intensitätsbasierte Konvertierung: Einfach zu implementieren, schnell, erzeugt eine große Ausgabe mit Pixel-zu-Zeichen-Zuordnung. Geeignet für größere Bilder.
-
Zeichenanpassung: Langsamer, komplexer, liefert bessere Ergebnisse auch bei größeren Schriftarten. Behält Form und Details für Gesichter und einige komplexe Bilder bei.
Tipps
- Verwenden Sie Schriftarten mit fester Teilung (z. B. System) mit einem OEM-Zeichensatz .
- Experimentieren Sie mit verschiedenen Zeichenkarten und Zonenlayouts.
- Erwägen Sie die umgekehrte Intensität, bei der schwarze Pixel den maximalen Wert haben, für eine bessere Textvorschau auf weißem Hintergrund.
Das obige ist der detaillierte Inhalt vonWie konvertiert man Bilder mit C in ASCII-Grafik: Intensitätsbasiert vs. Zeichenanpassung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
Stellungnahme:Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn