ASCII Art v Jave

1. Prehľad

V tomto článku sa budeme zaoberať vytváraním grafickej tlače znakov ASCII alebo Struny v Jave, s využitím konceptov z 2D grafiky podporujúcich jazyk.

2. Kreslenie reťazcov pomocou 2D grafiky

S pomocou Graphics2D triedy je možné nakresliť a String ako obrázok dosiahnutý vyvolaním drawString () metóda.

Pretože Graphics2D je abstraktné, môžeme vytvoriť inštanciu jej rozšírením a implementáciou rôznych metód spojených s Grafika trieda.

Aj keď je to zdĺhavá úloha, často sa to robí vytvorením BufferedImage napríklad v Jave a načítanie jej podkladových súborov Grafika príklad z toho:

BufferedImage bufferedImage = nový BufferedImage (šírka, výška, BufferedImage.TYPE_INT_RGB); Grafika grafika = bufferedImage.getGraphics ();

2.1. Nahradenie indexov matice obrazu znakom ASCII

Pri kreslení Struny, the Graphics2D trieda používa jednoduchú techniku ​​podobnú matici, kde regióny, ktoré vyrezávajú určené Struny je im pridelená konkrétna hodnota, zatiaľ čo iným je priradená nula.

Aby sme mohli nahradiť vyrezanú oblasť požadovaným znakom ASCII, musíme zistiť hodnoty vyrezávanej oblasti ako jediný údajový bod (napr. Celé číslo), a nie hodnoty farieb RGB.

Aby sme mali farbu obrázka RGB reprezentovanú ako celé číslo, nastavili sme typ obrázka na celočíselný režim:

BufferedImage bufferedImage = nový BufferedImage (šírka, výška, BufferedImage.TYPE_INT_RGB);

Základnou myšlienkou je nahradiť hodnoty priradené nenulovým indexom obrazovej matice požadovaným umeleckým charakterom.

Zatiaľ čo indexom matice predstavujúcim nulovú hodnotu bude priradený jeden znak medzery. Nulový ekvivalent celočíselného režimu je -16777216.

3. ASCII Art Generator

Uvažujme o prípade, keď potrebujeme vytvoriť ASCII umenie reťazca „BAELDUNG“.

Začneme vytvorením prázdneho obrázka s požadovanou šírkou / výškou a typom obrázka nastaveným na celočíselný režim, ako je uvedené v časti 2.1.

Aby sme mohli v Jave využívať pokročilé možnosti vykresľovania 2D grafiky, obsadili sme našu Grafika namietať voči a Graphics2D inštancia. Pred vyvolaním súboru potom nastavíme požadované parametre vykreslenia drawString () metóda s „BAELDUNG“ Reťazec:

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

Vo vyššie uvedenom poradí predstavuje 12 a 24 súradnice x a y bodu na obrázku, od ktorého by mala začať tlač textu.

Teraz máme 2D grafiku, ktorej podkladová matica obsahuje dva typy rozlíšených hodnôt; nenulové a nulové indexy.

Aby sme ale tento koncept dostali, prejdeme dvojrozmerným poľom (alebo maticou) a všetky hodnoty nahradíme znakom ASCII „*“ takto:

pre (int y = 0; y <settings.height; y ++) {StringBuilder stringBuilder = nový StringBuilder (); for (int x = 0; x <settings.width; x ++) {stringBuilder.append ("*"); } if (stringBuilder.toString (). trim (). isEmpty ()) {continue; } System.out.println (stringBuilder); }

Výstup z vyššie uvedeného zobrazuje iba blok hviezdičiek (*), ako je vidieť nižšie:

Ak diskriminujeme nahradenie znakom „*“ nahradením iba celočíselných hodnôt rovných -16777216 znakom „*“ a zvyšok znakom „“:

for (int y = 0; y <settings.height; y ++) {StringBuilder stringBuilder = nový StringBuilder (); for (int x = 0; x <settings.width; x ++) {stringBuilder.append (image.getRGB (x, y) == -16777216? "*": ""); } if (stringBuilder.toString (). trim (). isEmpty ()) {continue; } System.out.println (stringBuilder); }

Získame iné umenie ASCII, ktoré zodpovedá nášmu reťazcu „BAELDUNG“, ale v obrábanom rezbore, ako je tento:

Na záver invertujeme diskrimináciu nahradením celočíselných hodnôt rovných -16777216 za „“ a zvyšok za „*“:

for (int y = 0; y <settings.height; y ++) {StringBuilder stringBuilder = nový StringBuilder (); for (int x = 0; x <settings.width; x ++) {stringBuilder.append (image.getRGB (x, y) == -16777216? "": "*"); } if (stringBuilder.toString (). trim (). isEmpty ()) {continue; } System.out.println (stringBuilder); }

To nám dáva ASCII umenie požadovaného Reťazec:

4. Záver

V tomto rýchlom výučbe sme sa pozreli na to, ako vytvoriť umenie ASCII v Jave pomocou zabudovanej 2D grafickej knižnice.

Aj keď sme ukázali špeciálne pre text; “BAELDUNG”, zdrojový kód na Githube poskytuje užitočnú funkciu, ktorá akceptuje akékoľvek String.

Zdrojový kód, ako vždy, nájdete na GitHub.


$config[zx-auto] not found$config[zx-overlay] not found