ASCII Umjetnost na Javi

1. Pregled

U ovom ćemo članku razgovarati o stvaranju grafičkog ispisa ASCII znakova ili Žice u Javi, koristeći koncepte iz 2D grafičke podrške jezika.

2. Crtanje žica pomoću 2D grafike

Uz pomoć Grafika2D razreda, moguće je nacrtati a Niz kao slika, postignuta pozivanjem na drawString () metoda.

Jer Grafika2D je apstraktan, možemo stvoriti instancu proširujući je i primjenjujući različite metode povezane s Grafika razred.

Iako je ovo dosadan zadatak, to se često čini stvaranjem a Slika u baferu instanci u Javi i dohvaćanje njenih temeljnih podataka Grafika primjer iz njega:

BufferedImage bufferedImage = nova BufferedImage (širina, visina, BufferedImage.TYPE_INT_RGB); Grafika grafika = puferiranaImage.getGraphics ();

2.1. Zamjena indeksa matrice slike ASCII znakom

Pri crtanju Žice, the Grafika2D razred koristi jednostavnu tehniku ​​nalik matrici gdje regije koje urezuju osmišljeno Žice im se dodjeljuje određena vrijednost, dok se drugima daje nulta vrijednost.

Da bismo mogli zamijeniti urezano područje željenim ASCII znakom, moramo otkriti vrijednosti urezanog područja kao jednu podatkovnu točku (npr. Cijeli broj), a ne vrijednosti RGB boje.

Da bi RGB boja slike bila predstavljena kao cijeli broj, vrstu slike postavljamo na cijeli broj:

BufferedImage bufferedImage = nova BufferedImage (širina, visina, BufferedImage.TYPE_INT_RGB);

Temeljna je ideja zamijeniti vrijednosti dodijeljene indeksima koji nisu nulti u matrici slike željenim umjetničkim likom.

Dok će indeksima matrice koji predstavljaju nultu vrijednost dodijeliti jedan razmak. Nulti ekvivalent cjelobrojnog načina je -16777216.

3. ASCII umjetnički generator

Razmotrimo slučaj u kojem trebamo izraditi ASCII umjetnost niza "BAELDUNG".

Započinjemo stvaranjem prazne slike sa željenom širinom / visinom i tipom slike postavljenim na cjelobrojni način, kao što je spomenuto u odjeljku 2.1.

Da bismo mogli koristiti napredne mogućnosti prikazivanja 2D grafike na Javi, postavili smo svoj Grafika prigovoriti a Grafika2D primjer. Zatim postavljamo željene parametre prikazivanja prije poziva na drawString () metoda s "BAELDUNG" Niz:

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

U prethodnom tekstu 12 i 24 predstavljaju koordinate x i y za točku na slici odakle bi trebao započeti ispis teksta.

Sada imamo 2D grafiku čija temeljna matrica sadrži dvije vrste diskriminiranih vrijednosti; indeksi koji nisu nula i nula.

Ali da bismo dobili koncept, proći ćemo kroz dvodimenzionalni niz (ili matricu) i zamijeniti sve vrijednosti ASCII znakom "*" tako da:

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

Izlaz gore navedenog prikazuje samo blok zvjezdica (*) kao što se vidi dolje:

Ako zamijenimo zamjenu s "*" zamjenom samo cijelih vrijednosti jednakih -16777216 s "*", a ostale s "":

for (int y = 0; y <settings.height; y ++) {StringBuilder stringBuilder = novi 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); }

Dobivamo drugačiju ASCII umjetnost koja odgovara našem nizu "BAELDUNG", ali u obrnutom rezbarenju poput ovog:

Konačno, invertiramo diskriminaciju zamjenom cjelobrojnih vrijednosti jednakih -16777216 sa "", a ostatak s "*":

for (int y = 0; y <settings.height; y ++) {StringBuilder stringBuilder = novi 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 nam daje ASCII umjetnost željenog Niz:

4. Zaključak

U ovom smo brzom vodiču pogledali kako stvoriti ASCII umjetnost na Javi pomoću ugrađene 2D grafičke biblioteke.

Iako smo pokazali posebno za tekst; "BAELDUNG", izvorni kod na Githubu nudi uslužnu funkciju koja prihvaća bilo koju Niz.

Izvorni kod, kao i uvijek, možete pronaći na GitHubu.