Kreis zeichnen (mit Pixel angewendet, die in einem Bild mit for-Schleife)
Möchte ich einen Kreis zeichnen (mit 1 oder 2 for-Schleifen) mit der Pixel-position (beginnt oben Links und endet unten rechts)
Habe ich erfolgreich zeichnete ein Rechteck mit dieser Methode:
private void drawrect(int width,int height,int x,int y) {
int top=y;
int left=x;
if(top<0){
height+=top;
top=0;
}
if(left<0){
width+=left;
left=0;
}
for (int j = 0; j <width; j++) {
for (int i = 0; i <height; i++) {
pixels[((i+top)*w)+j+left] = 0xffffff;//white color
}
}
}
Dem Pixel-array enthält die pixel-index, gefolgt von seiner Farbe.
pixels[index]=color;
Vor, dass ich mit diesem code für "Bild" und "Pixel" ein array (falls dir das hilft)
img = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
pixels = ((DataBufferInt) img.getRaster().getDataBuffer()).getData();
Aber wie kann ich das zeichnen nur die weißen Pixel, wie in diesem Bild, und ignorieren die anderen Pixel?
Pixel-Bild http://oi42.tinypic.com/2u61sud.jpg
- Sie wollen wahrscheinlich zu Google, "Bresenham-Kreis" für den Algorithmus 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist der code für das zeichnen Kreis mit Bildpunkten: Er verwendet die Formel xend = x + r cos(Winkel) und yend = y + r sin(Winkel).
Referenz: http://www.softwareandfinance.com/Turbo_C/DrawCircle.html
bios.h
,graphics.h
Ernst... Tonnen von unnötigen Abhängigkeiten. Und obendrein haben Siemath.h
, die eine Konstante PI in der es noch gehen Sie definieren Ihre eigenen...Da Sie bereits eine
BufferedImage
ist, warum nicht erstellen Sie ein graphics-Objekt für es und verwenden, zeichnen Sie den Kreis? So dass Sie nicht haben, das Rad neu zu erfinden:Update
Hier ist ein SSCCE:
Es sollte ein Bild wie dieses:
paint
Methode derCanvas
zum zeichnen des Bildes auf der Leinwand. Ich aktualisiert die Beispiel.Sorry für die Verzögerung
Dieser code funktioniert perfekt
Einen Weg, dies zu tun wäre, um zu testen, für jeden Punkt im Rechteck ist, oder ob die Entfernung nicht aus, dass die pixel um den Mittelpunkt des Quadrats ist kleiner als der soll-radius des Kreises. Sie könnten dann das zeichnen der Pixel, die den test bestehen, und überspringen Sie die Pixel, die nicht. Das Verhältnis der Fläche des Kreises zur Fläche des gesamten Quadrats ist π/4, die über .77, so dass diese eigentlich gar nicht so ineffizient.
Wenn Sie möchten, zeichnen Sie eine beliebige oval, das passt in das Rechteck, Sie können diese gleiche Idee, aber ändern würde, die Berechnung, die bestimmen die Distanz zum Zentrum, so dass Sie geben anteilig weniger Gewicht auf die lange Achse der ellipse.
Hoffe, das hilft!