Zum Menü springen Zum Inhalt springen

iamBlog

Java: Havin’ Fun!

22.04 2008 11:07

Vorher Dieser kleine Beitrag soll ein bisschen zur „Motivationsrückgewinnung“ für Java dienen. Nach stundenlangem Programmieren an einer Videothek, die eigentlich nicht wirklich spektakuläre Sachen kann, verliert man oft die Lust weiterzucoden. Für den Lerneffekt ist dies natürlich nicht sehr optimal. Es hilft oft viel mehr, wenn man selber Programme schreibt und an diesen, dann lernt.

Ich hab mir gedacht, dass ich euch ein kleines „ASCII-Art“-Programm zeige, das mit recht wenig Aufwand ziemlich coole Bilder produzieren kann ;)

Sooo...

Was soll das Programm machen?

Dieses Programm soll ein Bild einlesen und die Grauwerte der Pixel in ein zweidimensionales Array speichern, diesen Werten ein ASCII-Zeichen zuweisen und diese dann ausgeben.

Wie liest man Bilder ein?

Bildereinlesen ist gar nicht so schwer...

Diese Variante ist im Vorgegebenen Teil der "PhotoHopp" - Aufgabe aus dem 1. Semester zu finden:


Toolkit toolkit = Toolkit.getDefaultToolkit();
Image srcImage = toolkit.getImage("EinBeliebigesBild.gif");

Für dieses kleine Beispiel wollen wir aber ein "BufferedImage" verwenden:


BufferedImage srcImage; 
BufferedInputStream in = new BufferedInputStream(new FileInputStream(imagePath)); 
srcImage = ImageIO.read(in); 

imagePath ist ein String, der den Pfad des einzulesenden Bildes beschreibt. z. B. "eintollesBild.gif"

Woher krieg ich die Grauwerte eines Pixels?

Dies ist ganz einfach, da wir ein BufferedImage verwenden!

Zuerst das Array erstellen:


int W = srcImage.getWidth(); 
int H = srcImage.getHeight();
int [][] values = new int[H][W]; 

Zwei Schleifen - wir wollen ja alle Pixel des Bildes haben:


for (int y = 0; y < H; y++) { 
   for (int x = 0; x < W; x++) { 
   } 
} 

In die Schleife den "magischen Code" eintragen:


      Color col = new Color(srcImage.getRGB(x, y)); 
      values[y][x] = ((col.getRed() + col.getGreen() + col.getBlue())/3);

Der Grauwert einer Farbe ist der "Durchschnittswert" der 3 Farbanteile Rot, Grün und Blau.

Wie macht man aus diesem Array ein ASCII-Bild?

Am einfachsten lässt sich das realisieren, wenn man in der innersten Schleife ein "System.out.print((char)(GrauwertDerFarbe))" und am Ende der 1. Schleife ein "System.out.println()" hinschreibt. Bei dieser Methode kann das Array sogar ganz weggelassen werden.

Wenn man mehr aus diesem Bild rausholen mag, ist das Array aber ein guter Weg, da man so die Bilddaten nur einmal auslesen muss.

Für mein Bild hab ich eine "ColorTable" erstellt - also eine Tabelle die für einen Farbbereich ein bestimmtes "ASCII-Zeichen" bestimmt.

Vorher:

Vorher

Als Ascii-Art:

Nachher: Ascii-Art

(der Text wurde ein bisschen gestaucht, da das Programm die Zeichenhöhe und -breite noch nicht berücksichtigt)

Hier ein paar Anwendungen:

Ascii Art Ascii Art

Kommentare

  1. 1

    Das Programm (ein bisschen erweitert ;) ) als .jar File

    Kommentar von Dominik Felber am 30. 04. 2008 um 19:01 Uhr
  2. Dieser Eintrag kann nicht mehr kommentiert werden.

Nächster Eintrag: GTA IV: "Weil wir Männer sind"

Vorheriger Eintrag: My Designer of the Week #1: The Co-Op

Über den iamBlog

Der iamBlog ist von und für Studenten der FH Augsburg und alle Leute die sich für Design, Medien und Multimedia interessieren.

Namensgebend war der Studiengang InterAktive Medien an der FH Augsburg.

Der Blog befindet sich Moment noch im Aufbau. Wir entschuldigen uns für eventuell fehlende Funktionen und den ein oder anderen Fehler im System.

Die neuesten Links

Kategorien

Das neueste Design

Avant von pichfl

Zum Auswählen eines Designs einfach oben links auf den Button Hintergrund ändern klicken.

Feeds

Die Einträge im Blog lassen sich als Atom-Feed abonnieren. Außerdem gibt es einen kombinierten Atom-Feed, der Blogeinträge und Links enthält.
Diese Feeds werden z.B. von Browsern wie Safari oder Mozilla Firefox, Newsreadern wie NetNewsWire oder Feadreader oder Onlinediensten wie Google Reader unterstützt und werden automatisch aktualisiert, wenn neue Einträge im iamBlog vorhanden sind.

Werbung

Disclaimer

This page will never work with Internet Explorer. If you use Internet Explorer to view this page, all styles and features are deactivated. Use Firefox, Safari or Opera to see all the beautiful colours of the internet.