Lineal mit Zahlen zeichnen

flashdog

Bekanntes Mitglied
Hallo,
zuerst liest der Code die folgende Eingabedatei ein:
Java:
0
0
0
0
0
0
0
0
0
0
3
3
3
3
3
3
3
3
3
3
4
4
4
4
4
8
8
8
8
8

Der Code sieht wie folgt aus:
Java:
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import javax.imageio.ImageIO;

public class TestRuler {

  public static void main(String[] args) throws FileNotFoundException, IOException {
    final int IMAGE_HEIGHT = 100;                   
    final int SNP_WIDTH = 1;

    String fileName = "testruler.txt";
    String outputImg = fileName + ".png";


    BufferedReader br = new BufferedReader(new FileReader(fileName));
    ArrayList<Integer> numbersFromFile = new ArrayList<Integer>();

    String line;
    while ((line = br.readLine()) != null) {
      int temp = Integer.parseInt(line.trim());
        numbersFromFile.add(temp);
    }

    Color color[] = {
      Color.BLACK, Color.BLUE, Color.CYAN, Color.DARK_GRAY, Color.GRAY,
      Color.GREEN, Color.LIGHT_GRAY, Color.MAGENTA, Color.ORANGE, Color.PINK,
      Color.RED, Color.WHITE, Color.YELLOW
    };
    BufferedImage chr = new BufferedImage(numbersFromFile.size(), IMAGE_HEIGHT,
            BufferedImage.TYPE_INT_ARGB);

    Graphics2D g2 = chr.createGraphics();

    g2.setColor(Color.WHITE);
    int x = 0;
    for (int median : numbersFromFile) {
      g2.setColor(color[median]);
      g2.fillRect(x++, 20, SNP_WIDTH, IMAGE_HEIGHT-20);

      if (x % 10  == 0){
        g2.setColor(Color.MAGENTA);
        g2.fillRect(x, 15, SNP_WIDTH, 5);
        g2.drawString(x + "M", x, 10);
      }
    }
    ImageIO.write(chr, "png", new File(outputImg));
  }
}

Dieser Code zeichnet das Lineal (jede 10te stelle ein strich), aber leider weiss ich nicht wie man die dazugehörigen Zahlen umdrehen kann so dass diese die Striche benenn?

Viele Gruesse
 

Kr0e

Gesperrter Benutzer
Graphics2D unterstützt die Methode "rotate". Damit kannst du den Grafikkontext drehen. Musst ihn aber zurück drehen, da jeder Zeichenbefehl von da an gedreht ist...
 

flashdog

Bekanntes Mitglied
Danke, für den tip mit 2 * rotate.

Jetzt habe ich nur das Problem den Text mit drawString zentriert über jeden Lineal-Strich zu setzen.
 

andre111

Bekanntes Mitglied
Du kannst mithilfe von FontMetrics die Breite eines Strings mit einer bestimmten Font bestimmen. So kannst du dann auch die Position des Strings zentrieren.
 

flashdog

Bekanntes Mitglied
Leider weiss ich immer noch nicht wie man mit FontMetrics den Text an jeder Messeinheit zentriert bekommt.

Gibt es irgendwo Beispiele?
 

flashdog

Bekanntes Mitglied
Habe den Code aktualisiert, aber nun verschwinden die Messeinheiten und ich habe immer noch nicht verstanden wie FontMetrics mir helfen kann.

Der aktuelle Code sieht wie folgt aus:
Java:
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import javax.imageio.ImageIO;

public class TestRuler {

  public static void main(String[] args) throws FileNotFoundException, IOException {
    final int IMAGE_HEIGHT = 100;                   
    final int SNP_WIDTH = 1;

    
    String fileName = "/media/disk/testruler.txt";
    String outputImg = fileName + ".png";


    BufferedReader br = new BufferedReader(new FileReader(fileName));
    ArrayList<Integer> numbersFromFile = new ArrayList<Integer>();

    String line;
    while ((line = br.readLine()) != null) {
      int temp = Integer.parseInt(line.trim());
        numbersFromFile.add(temp);
    }

    Color color[] = {
      Color.BLACK, Color.BLUE, Color.CYAN, Color.DARK_GRAY, Color.GRAY,
      Color.GREEN, Color.LIGHT_GRAY, Color.MAGENTA, Color.ORANGE, Color.PINK,
      Color.RED, Color.WHITE, Color.YELLOW
    };
    BufferedImage chr = new BufferedImage(numbersFromFile.size(), IMAGE_HEIGHT,
            BufferedImage.TYPE_INT_ARGB);

    Graphics2D g2 = chr.createGraphics();

    g2.setColor(Color.WHITE);
    int x = 0;
    for (int median : numbersFromFile) {
      g2.setColor(color[median]);
      g2.fillRect(x++, 20, SNP_WIDTH, IMAGE_HEIGHT-20);

      if (x % 10  == 0){
        g2.setColor(Color.MAGENTA);
        g2.fillRect(x, 15, SNP_WIDTH, 5);

        g2.setFont(new Font( "SansSerif", Font.BOLD, 7));
        FontMetrics metrics = g2.getFontMetrics();
        g2.rotate(-Math.toRadians(70));


        g2.drawString(x + "M", x, 45);
        g2.rotate(Math.toRadians(70));
      }
    }
    ImageIO.write(chr, "png", new File(outputImg));
  }
}

Was mache ich falsch?
 
S

SlaterB

Gast
schau dir das verlinkte Beispiel an, da steht z.B.
SwingUtilities.computeStringWidth(fm, text)
drin, was das bedeutet kann man ja einigermaßen erahnen, oder nachlesen oder auch ausprobieren,

nimm 5 Strings
a
ab
abc
abcd
abcde
und rechne erstmal deren Länge aus und gib sie mit System.out.println aus,
gar nicht mit komplizierten malen anfangen wobei dieses Rechnen wahrscheinlich nur innerhalb der paint-Methode ordentlich geht

in deinem Code nutzt du jedenfalls das FontMetrics-Objekt bisher nicht, das kann dir noch gar nichts kaputtmachen,
für meinen Geschmack hast du auch ansonstern zuviel Krimskrams drin,
immer einfach anfangen, ohne Schleife, erstmal nur wenig Text, dann langsam verschieben, rotieren, so dass du immer weißt, was wo passiert
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
X Zahlen Ratespiel Spiele- und Multimedia-Programmierung 1
O In Array Pulk von gleichen Zahlen finden. Spiele- und Multimedia-Programmierung 4
F Problem bei Mastermind mit Zahlen Spiele- und Multimedia-Programmierung 5
E relevanter bereich einer isometrischen karte zeichnen (AffineTransform) Spiele- und Multimedia-Programmierung 0
SaftigMelo Kreissegment zeichnen Spiele- und Multimedia-Programmierung 2
E Buttons neu zeichnen im GridLayout Spiele- und Multimedia-Programmierung 2
A Zeichnen außerhalb der paint-Methode Spiele- und Multimedia-Programmierung 6
E Isometrische Tiles mit unterschiedlicher Größe an korrekter Position zeichnen Spiele- und Multimedia-Programmierung 1
Androbin Mein Spiel will sich nicht zeichnen lassen !!! Spiele- und Multimedia-Programmierung 7
J Int Wert auf JFrame zeichnen Spiele- und Multimedia-Programmierung 3
H [ANIMATION] Hintergrundbild nur einmal zeichnen Spiele- und Multimedia-Programmierung 3
R [lwjgl] Cursor -> versetzt Zeichnen / Bild ist umgedreht Spiele- und Multimedia-Programmierung 2
M Methoden eine Map zu zeichnen Spiele- und Multimedia-Programmierung 5
aze Nicht rechteckiges Bild zeichnen Spiele- und Multimedia-Programmierung 5
F nur Ausschnitt eines Image zeichnen Spiele- und Multimedia-Programmierung 9
T 3D Graphen Zeichnen Spiele- und Multimedia-Programmierung 19
F Kurven zeichnen Spiele- und Multimedia-Programmierung 2
E Keine Werte zum Zeichnen werden Übergeben Spiele- und Multimedia-Programmierung 3
A Halbkreise zeichnen lassen? Spiele- und Multimedia-Programmierung 2
N Linie mit Rand zeichnen Spiele- und Multimedia-Programmierung 10
A Mehrere geometrische Objekte in JPanel zeichnen Spiele- und Multimedia-Programmierung 4
A Optimiertes Zeichnen - wie? Spiele- und Multimedia-Programmierung 8
data89 Koordinaten in Koordinatensystem zeichnen Spiele- und Multimedia-Programmierung 11
M Binärbaum ohne Überlappung zeichnen Spiele- und Multimedia-Programmierung 3
H Decke zeichnen mit Hilfe eines Polygons Spiele- und Multimedia-Programmierung 2
B 1)JButtons zeichnen 2)Kolisionsabfrage von zwei Objekten Spiele- und Multimedia-Programmierung 9
G Linie im Applet zeichnen Spiele- und Multimedia-Programmierung 5
G Schüsse zeichnen, Fehler? Spiele- und Multimedia-Programmierung 3
S Dreieck zeichnen Spiele- und Multimedia-Programmierung 9
G Überlagern von Strings beim zeichnen verhindern Spiele- und Multimedia-Programmierung 3
C Objekt bei Buttonklick zeichnen Spiele- und Multimedia-Programmierung 16
G Geschwungene Klammer zeichnen Spiele- und Multimedia-Programmierung 5
F Neu zeichnen verhindern Spiele- und Multimedia-Programmierung 25
J Zeichnen in BufferedImage und dieses in Datei speichern Spiele- und Multimedia-Programmierung 2
O Funktion zeichnen Spiele- und Multimedia-Programmierung 11
A Lissajous Figuren zeichnen Spiele- und Multimedia-Programmierung 1
G Maus springt --> Free-Hand-Zeichnen Spiele- und Multimedia-Programmierung 2
L Schüsse zeichnen Spiele- und Multimedia-Programmierung 13
M Eigene Strings zeichnen Spiele- und Multimedia-Programmierung 4
T Blitz berechnen und zeichnen Spiele- und Multimedia-Programmierung 13
M auswahlkreis zeichnen (schräg) Spiele- und Multimedia-Programmierung 4
N Logik: Grenz-/Frontlinie zeichnen Spiele- und Multimedia-Programmierung 4
M Grafikprogramm, zeichnen mit Maus Spiele- und Multimedia-Programmierung 7
G Problem beim Zeichnen von LineArrays Spiele- und Multimedia-Programmierung 9
P linie in bild zeichnen Spiele- und Multimedia-Programmierung 2
G Auf 3D Box zeichnen Spiele- und Multimedia-Programmierung 4
K mit Canvas übereinander zeichnen Spiele- und Multimedia-Programmierung 4
G 3D Raum zeichnen Spiele- und Multimedia-Programmierung 7
H Kreis zeichnen mittels Schleife & drawLine Spiele- und Multimedia-Programmierung 4
B Probleme beim zeichnen Spiele- und Multimedia-Programmierung 15
N Bild zu zeichnen (drawImage) klappt nur manchmal?? Spiele- und Multimedia-Programmierung 8
T Effizient zeichnen Spiele- und Multimedia-Programmierung 12
H mit Java2D Markierung über JTable zeichnen und diese bewegen Spiele- und Multimedia-Programmierung 2
C Graphische Benutzerschnittstelle, Problem beim Zeichnen Spiele- und Multimedia-Programmierung 4
J schnellste alternative um in java zu "zeichnen" Spiele- und Multimedia-Programmierung 17
conan2 Objekte in richtiger Z-Reihenfolge zeichnen Spiele- und Multimedia-Programmierung 2
G Punkte in Java3D zeichnen Spiele- und Multimedia-Programmierung 2
S Pixel zeichnen Spiele- und Multimedia-Programmierung 3
S Bild in Speicherbild zeichnen = Nichts? Spiele- und Multimedia-Programmierung 3
G Farbig zeichnen ohne java.awt.Color? Spiele- und Multimedia-Programmierung 5
S Wie kann ich das Zeichnen der Grafik feiner machen? Spiele- und Multimedia-Programmierung 9
M Wie kann man Kreisringe zeichnen ? Spiele- und Multimedia-Programmierung 12
C Graphics 2D Zeichnen Spiele- und Multimedia-Programmierung 4
R Kreuz lässt sich nicht zeichnen Spiele- und Multimedia-Programmierung 11
F einzelne Polygone(Graphics) schneller als and. Fig. zeichnen Spiele- und Multimedia-Programmierung 3
K Kugeln und Zylinder zeichnen Spiele- und Multimedia-Programmierung 4
L ein Rechteck zeichnen Spiele- und Multimedia-Programmierung 6

Ähnliche Java Themen

Neue Themen


Oben