ASCII Art Java nyelven

1. Áttekintés

Ebben a cikkben megvitatjuk az ASCII karakterek grafikus nyomtatásának létrehozását vagy Húrok Java-ban, a nyelv 2D grafikus támogatásából származó fogalmak felhasználásával.

2. Húrok rajzolása 2D grafikával

A segítségével Graphics2D osztályban lehetséges a Húr mint kép, a drawString () módszer.

Mivel Graphics2D absztrakt, létrehozhatunk egy példányt annak kibővítésével és a Grafika osztály.

Bár ez egy fárasztó feladat, gyakran a BufferedImage például a Java-ban, és lekérjük az alapját Grafika példány belőle:

BufferedImage bufferedImage = új BufferedImage (szélesség, magasság, BufferedImage.TYPE_INT_RGB); Grafikus grafika = bufferedImage.getGraphics ();

2.1. A képmátrix-indexek cseréje ASCII-karakterrel

Rajzoláskor Húrok, a Graphics2D osztály egy egyszerű mátrixszerű technikát alkalmaz, ahol a megtervezett régiókat faragják Húrok egy adott értéket kapnak, míg mások zéró értéket kapnak.

Ahhoz, hogy a faragott területet a kívánt ASCII karakterrel helyettesítsük, a faragott terület értékeit egyetlen adatpontként (pl. Egész számként) kell észlelnünk, és nem az RGB színértékeket.

Ahhoz, hogy a kép RGB színe egész szám legyen, a kép típusát egész módra állítjuk:

BufferedImage bufferedImage = új BufferedImage (szélesség, magasság, BufferedImage.TYPE_INT_RGB);

Az alapötlet az, hogy a képmátrix nullától eltérő indexeihez rendelt értékeket kicseréljük a kívánt művészi karakterre.

Míg a nulla értéket képviselő mátrix indexeihez egyetlen szóköz tartozik. Az egész mód nulla egyenértéke -16777216.

3. ASCII Art Generator

Vegyünk egy esetet, amikor a „BAELDUNG” karakterláncból ASCII rajzot kell készítenünk.

Először egy üres képet készítünk a kívánt szélességgel / magassággal, és a kép típusát egész módra állítjuk, amint azt a 2.1 szakasz említi.

Annak érdekében, hogy a 2D-s grafika fejlett renderelési opcióit használhassuk a Java-ban, leadtuk a következőket Grafika kifogásolni a Graphics2D példa. Ezután beállítottuk a kívánt megjelenítési paramétereket, mielőtt a drawString () módszer a „BAELDUNG” módszerrel Húr:

Graphics2D graphics2D = (Graphics2D) grafika; graphics2D.setRenderingHint (RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); graphics2D.drawString ("BAELDUNG", 12, 24);

A fentiekben 12, illetve 24 képviseli a kép azon pontjának x és y koordinátáját, ahonnan a szövegnyomtatást el kell kezdeni.

Most van egy 2D grafikánk, amelynek mögöttes mátrixa kétféle megkülönböztetett értéket tartalmaz; nem nulla és nulla indexek.

De ahhoz, hogy megkapjuk a koncepciót, átmegyünk a 2-dimenziós tömbön (vagy mátrixon), és az összes értéket az ASCII „*” karakterre cseréljük:

for (int y = 0; y <beállítások.magasság; y ++) {StringBuilder stringBuilder = új StringBuilder (); for (int x = 0; x <beállítások.szélesség; x ++) {stringBuilder.append ("*"); } if (stringBuilder.toString (). trim (). isEmpty ()) {folytatás; } System.out.println (stringBuilder); }

A fentiek kimenetén csak egy csillagblokk (*) látható, amint az alább látható:

Ha megkülönböztetjük a helyettesítést „*” jellel, és csak a -16777216 értékű egész számot „*” -ra, a többit pedig „” -ra cseréljük:

for (int y = 0; y <beállítások.magasság; y ++) {StringBuilder stringBuilder = új StringBuilder (); for (int x = 0; x <beállítások.szélesség; x ++) {stringBuilder.append (image.getRGB (x, y) == -16777216? "*": ""); } if (stringBuilder.toString (). trim (). isEmpty ()) {folytatás; } System.out.println (stringBuilder); }

Eltérő ASCII művészetet kapunk, amely megfelel a "BAELDUNG" húrunknak, de egy ilyen fordított faragásnál:

Végül megfordítjuk a megkülönböztetést úgy, hogy a -16777216-nak megfelelő egész számokat "" -re cseréljük, a többit pedig "*" -ra cseréljük:

for (int y = 0; y <beállítások.magasság; y ++) {StringBuilder stringBuilder = új StringBuilder (); for (int x = 0; x <beállítások.szélesség; x ++) {stringBuilder.append (image.getRGB (x, y) == -16777216? "": "*"); } if (stringBuilder.toString (). trim (). isEmpty ()) {folytatás; } System.out.println (stringBuilder); }

Ez megadja nekünk a kívánt ASCII művészetet Húr:

4. Következtetés

Ebben a gyors bemutatóban megvizsgáltuk, hogyan hozható létre ASCII art Java-ban a beépített 2D grafikus könyvtár segítségével.

Míg kifejezetten a szöveghez mutattunk; A „BAELDUNG”, a Github forráskódja olyan segédfunkciót biztosít, amely bármelyiket elfogadja Húr.

A forráskód, mint mindig, a GitHubon található.