2016-05-27 19 views
0

Ich habe ein Programm, das eine .ppm-Datei mit einer Reihe von schwarzen Punkten darauf generiert. Ich möchte Linien zwischen diesen Punkten zeichnen, um ein Diagramm zu erstellen, aber anstatt eine Swing-Methode zu verwenden, möchte ich wissen, ob es einen Weg gibt, dies zu tun, indem man direkt die .ppm-Matrix manipuliert. Ich nehme an, es würde einige verschachtelte Schleifen benötigen, aber wie würde ich identifizieren, welche Positionen ich ändern muss, um die Linie zwischen zwei Punkten zu erstellen?Eine andere Möglichkeit zum Zeichnen von Linien

(für diejenigen, die nicht wissen, ist eine .ppm Datei im Grunde eine riesige Matrix mit drei RGB-Werten für jeden der seine Positionen, so dass Sie Sachen Pixel für Pixel zeichnen)

+1

https://en.m.wikipedia.org/wiki/Bresenham%27s_line_algorithm –

+1

Suche nach _Java ImageIO portables Pixel ap format_; JAI hatte ein Plugin. – trashgod

+0

zeigen Sie uns, wie Sie das PPM lesen - das ist der Ausgangspunkt – gpasch

Antwort

0

Einzelpixelstärke:

void drawline(Color pixels[][], int width, int height, 
       int x1, int x2, int y1, int y2, Color line) 
{ 
    int dx = x1 - x2; 
    int dy = y1 - y2; 
    if (dx != 0 || dy != 0) 
    { 
     int n = Math.Max(Math.Abs(dx), Math.Abs(dy)); 
     double inv = 1.0/(double)(n + 1); 
     double dxdn = (double)dx * inv; 
     double dydn = (double)dy * inv; 
     double x = (double)x1, y = (double)y1; 
     for (int i = 0; i <= n; i++) 
     { 
     int xi = (int)x, yi = (int)y; 
     if (xi >= 0 || xi < width || yi >= 0 || yi < height) 
      pixels[yi][xi] = line; 
     x += dxdn; y += dydn; 
     } 
    } 
} 

(NB dies ist in C# Syntax, Sie kleinere Änderungen brauchen kann es zu Java konvertieren)

Verwandte Themen