Weitere image-Methoden ergänzt

Die neuen Methoden erlauben es, Bilder auch mit einer festen Größe auf die Zeichenebene zu zeichnen.
This commit is contained in:
ngb
2022-12-09 18:01:52 +01:00
parent c7e1eb11ed
commit 3cf7871591

View File

@@ -944,7 +944,7 @@ public class DrawingLayer extends Layer implements Strokeable, Fillable {
/** /**
* Zeichnet das Bild von der angegebenen Quelle an der angegebenen Position * Zeichnet das Bild von der angegebenen Quelle an der angegebenen Position
* auf dei Zeichenebene. * auf die Zeichenebene.
* <p> * <p>
* Die Bildquelle wird mithilfe von {@link ImageLoader#loadImage(String)} * Die Bildquelle wird mithilfe von {@link ImageLoader#loadImage(String)}
* geladen. Schlägt dies fehl, wird nichts gezeichnet. * geladen. Schlägt dies fehl, wird nichts gezeichnet.
@@ -952,6 +952,7 @@ public class DrawingLayer extends Layer implements Strokeable, Fillable {
* @param imageSource Die Bildquelle. * @param imageSource Die Bildquelle.
* @param x x-Koordinate des Ankerpunktes. * @param x x-Koordinate des Ankerpunktes.
* @param y y-Koordinate des Ankerpunktes. * @param y y-Koordinate des Ankerpunktes.
* @see ImageLoader#loadImage(String)
*/ */
public void image( String imageSource, double x, double y ) { public void image( String imageSource, double x, double y ) {
image(ImageLoader.loadImage(imageSource), x, y, 1.0, shapeDelegate.getAnchor()); image(ImageLoader.loadImage(imageSource), x, y, 1.0, shapeDelegate.getAnchor());
@@ -959,7 +960,7 @@ public class DrawingLayer extends Layer implements Strokeable, Fillable {
/** /**
* Zeichnet das Bild von der angegebenen Quelle an der angegebenen Position * Zeichnet das Bild von der angegebenen Quelle an der angegebenen Position
* auf dei Zeichenebene. * auf die Zeichenebene.
* <p> * <p>
* Die Bildquelle wird mithilfe von {@link ImageLoader#loadImage(String)} * Die Bildquelle wird mithilfe von {@link ImageLoader#loadImage(String)}
* geladen. Schlägt dies fehl, wird nichts gezeichnet. * geladen. Schlägt dies fehl, wird nichts gezeichnet.
@@ -967,47 +968,73 @@ public class DrawingLayer extends Layer implements Strokeable, Fillable {
* @param imageSource Die Bildquelle. * @param imageSource Die Bildquelle.
* @param x x-Koordinate des Ankerpunktes. * @param x x-Koordinate des Ankerpunktes.
* @param y y-Koordinate des Ankerpunktes. * @param y y-Koordinate des Ankerpunktes.
* @param anchor * @param anchor Der Ankerpunkt.
* @see ImageLoader#loadImage(String)
*/ */
public void image( String imageSource, double x, double y, Options.Direction anchor ) { public void image( String imageSource, double x, double y, Options.Direction anchor ) {
image(ImageLoader.loadImage(imageSource), x, y, 1.0, anchor); image(ImageLoader.loadImage(imageSource), x, y, 1.0, anchor);
} }
/** /**
* @param imageSource * Zeichnet das Bild von der angegbenen Quelle an den angegebenen
* @param x * Koordinaten auf die Zeichenebene. Das Bild wird um den angegebenen Faktor
* @param y * skaliert.
* @param scale * <p>
* Siehe {@link #image(Image, double, double, double, Options.Direction)}
* für mehr Details.
*
* @param imageSource Die Bildquelle.
* @param x x-Koordinate des Ankerpunktes.
* @param y y-Koordinate des Ankerpunktes.
* @param scale Der Skalierungsfaktor des Bildes.
* @see ImageLoader#loadImage(String)
*/ */
public void image( String imageSource, double x, double y, double scale ) { public void image( String imageSource, double x, double y, double scale ) {
image(ImageLoader.loadImage(imageSource), x, y, scale, shapeDelegate.getAnchor()); image(ImageLoader.loadImage(imageSource), x, y, scale, shapeDelegate.getAnchor());
} }
/** /**
* @param imageSource * Zeichnet das Bild von der angegbenen Quelle an den angegebenen
* @param x * Koordinaten auf die Zeichenebene. Das Bild wird um den angegebenen Faktor
* @param y * skaliert und der angegebene Ankerpunkt verwendet.
* @param scale * <p>
* @param anchor * Siehe {@link #image(Image, double, double, double, Options.Direction)}
* für mehr Details.
*
* @param imageSource Die Bildquelle.
* @param x x-Koordinate des Ankerpunktes.
* @param y y-Koordinate des Ankerpunktes.
* @param scale Der Skalierungsfaktor des Bildes.
* @param anchor Der Ankerpunkt.
* @see ImageLoader#loadImage(String)
*/ */
public void image( String imageSource, double x, double y, double scale, Options.Direction anchor ) { public void image( String imageSource, double x, double y, double scale, Options.Direction anchor ) {
image(ImageLoader.loadImage(imageSource), x, y, scale, anchor); image(ImageLoader.loadImage(imageSource), x, y, scale, anchor);
} }
/** /**
* @param image * Zeichnet das angegebene Bild an den angegebenen Koordinaten auf die
* @param x * Zeichenebene.
* @param y *
* @param image Das vorher geladene Bild.
* @param x x-Koordinate des Ankerpunktes.
* @param y y-Koordinate des Ankerpunktes.
*/ */
public void image( Image image, double x, double y ) { public void image( Image image, double x, double y ) {
image(image, x, y, 1.0, shapeDelegate.getAnchor()); image(image, x, y, 1.0, shapeDelegate.getAnchor());
} }
/** /**
* @param image * Zeichnet das angegebene Bild an den angegebenen Koordinaten auf die
* @param x * Zeichenebene. Das Bild wird um den angegebenen Faktor skaliert.
* @param y * <p>
* @param scale * Siehe {@link #image(Image, double, double, double, Options.Direction)}
* für mehr Details.
*
* @param image Das vorher geladene Bild.
* @param x x-Koordinate des Ankerpunktes.
* @param y y-Koordinate des Ankerpunktes.
* @param scale Der Skalierungsfaktor des Bildes.
*/ */
public void image( Image image, double x, double y, double scale ) { public void image( Image image, double x, double y, double scale ) {
image(image, x, y, scale, shapeDelegate.getAnchor()); image(image, x, y, scale, shapeDelegate.getAnchor());
@@ -1015,8 +1042,18 @@ public class DrawingLayer extends Layer implements Strokeable, Fillable {
/** /**
* Zeichnet das angegebene Bild an den angegebenen Koordinaten auf die * Zeichnet das angegebene Bild an den angegebenen Koordinaten auf die
* Zeichenebene. Das Bild wird skaliert und der angegebene Ankerpunkt * Zeichenebene. Das Bild wird um den angegebenen Faktor skaliert und der
* verwendet. * angegebene Ankerpunkt verwendet.
* <p>
* Bei einem Faktor größer 0 wird das Bild vergrößert, bei einem Faktor
* kleiner 0 verkleinert. Bei negativen Werten wird das Bild entlang der x-
* bzw. y-Achse gespiegelt.
* <p>
* Das Seitenverhältnis wird immer beibehalten.
* <p>
* Soll das Bild innerhalb eines vorgegebenen Rechtecks liegen, sollte
* {@link #image(Image, double, double, double, double, Options.Direction)}
* verwendet werden.
* *
* @param image Das vorher geladene Bild. * @param image Das vorher geladene Bild.
* @param x x-Koordinate des Ankerpunktes. * @param x x-Koordinate des Ankerpunktes.
@@ -1025,16 +1062,116 @@ public class DrawingLayer extends Layer implements Strokeable, Fillable {
* @param anchor Der Ankerpunkt. * @param anchor Der Ankerpunkt.
*/ */
public void image( Image image, double x, double y, double scale, Options.Direction anchor ) { public void image( Image image, double x, double y, double scale, Options.Direction anchor ) {
if( image != null ) { /*if( image != null ) {
double neww = image.getWidth(null) * scale; double neww = image.getWidth(null) * scale;
double newh = image.getHeight(null) * scale; double newh = image.getHeight(null) * scale;
Point2D.Double anchorPoint = getOriginPoint(x, y, neww, newh, anchor); Point2D.Double anchorPoint = getOriginPoint(x, y, neww, newh, anchor);
drawing.drawImage(image, (int) anchorPoint.x, (int) anchorPoint.y, (int) neww, (int) newh, null); drawing.drawImage(image, (int) anchorPoint.x, (int) anchorPoint.y, (int) neww, (int) newh, null);
}*/
double neww = image.getWidth(null) * scale;
double newh = image.getHeight(null) * scale;
image(image, x, y, neww, newh, anchor);
}
/**
* Zeichnet das Bild von der angegebenen Quelle an den angegebenen
* Koordinaten in der angegebenen Größe auf die Zeichenebene.
* <p>
* Siehe
* {@link #image(Image, double, double, double, double, Options.Direction)}
* für mehr Details.
*
* @param imageSource Die Bildquelle.
* @param x x-Koordinate des Ankerpunktes.
* @param y y-Koordinate des Ankerpunktes.
* @param width Breite des Bildes auf der Zeichenebene oder 0.
* @param height Höhe des Bildes auf der Zeichenebene oder 0.
* @see ImageLoader#loadImage(String)
*/
public void image( String imageSource, double x, double y, double width, double height ) {
image(ImageLoader.loadImage(imageSource), x, y, width, height, shapeDelegate.getAnchor());
}
/**
* Zeichnet das Bild von der angegebenen Quelle an den angegebenen
* Koordinaten in der angegebenen Größe auf die Zeichenebene. Es wird der
* angegebene Ankerpunkt verwendet.
* <p>
* Siehe
* {@link #image(Image, double, double, double, double, Options.Direction)}
* für mehr Details.
*
* @param imageSource Die Bildquelle.
* @param x x-Koordinate des Ankerpunktes.
* @param y y-Koordinate des Ankerpunktes.
* @param width Breite des Bildes auf der Zeichenebene oder 0.
* @param height Höhe des Bildes auf der Zeichenebene oder 0.
* @param anchor Der Ankerpunkt.
* @see ImageLoader#loadImage(String)
*/
public void image( String imageSource, double x, double y, double width, double height, Options.Direction anchor ) {
image(ImageLoader.loadImage(imageSource), x, y, width, height, anchor);
}
/**
* Zeichnet das angegebene Bild an den angegebenen Koordinaten in der
* angegebenen Größe auf die Zeichenebene.
* <p>
* Siehe
* {@link #image(Image, double, double, double, double, Options.Direction)}
* für mehr Details.
*
* @param image Ein Bild-Objekt.
* @param x x-Koordinate des Ankerpunktes.
* @param y y-Koordinate des Ankerpunktes.
* @param width Breite des Bildes auf der Zeichenebene oder 0.
* @param height Höhe des Bildes auf der Zeichenebene oder 0.
*/
public void image( Image image, double x, double y, double width, double height ) {
image(image, x, y, width, height, shapeDelegate.getAnchor());
}
/**
* Zeichnet das angegebene Bild an den angegebenen Koordinaten in der
* angegebenen Größe auf die Zeichenebene. Der angegebene Ankerpunkt wird
* verwendet.
* <p>
* Das Bild wird innerhalb eines Rechtecks mit der angegebenen Breite und
* Höhe gezeichnet. Dabei wird das Abbild verzerrt, wenn beim Aufruf nicht
* auf ein passendes Seitenverhältnis der Werte zueinander geachtet wird.
* <p>
* Um das Bild auf eine bestimmte Breite oder Höhe festzulegen und die
* andere Größe passend zu skalieren, kann einer der Parameter auf 0 gesetzt
* werden.
* <p>
* Soll die Bildgröße unter Beachtung der Abmessungen um einen Faktor
* verändert werden, sollte
* {@link #image(Image, double, double, double, Options.Direction)}
* verwendet werden.
*
* @param image Ein Bild-Objekt.
* @param x x-Koordinate des Ankerpunktes.
* @param y y-Koordinate des Ankerpunktes.
* @param width Breite des Bildes auf der Zeichenebene oder 0.
* @param height Höhe des Bildes auf der Zeichenebene oder 0.
* @param anchor Der Ankerpunkt.
*/
public void image( Image image, double x, double y, double width, double height, Options.Direction anchor ) {
// TODO: Use Validator or at least LOG a message if image == null?
if( image != null ) {
if( width == 0 ) {
width = (height / image.getHeight(null)) * image.getWidth(null);
} else if( height == 0 ) {
height = (width / image.getWidth(null)) * image.getHeight(null);
}
Point2D.Double anchorPoint = getOriginPoint(x, y, width, height, anchor);
drawing.drawImage(image, (int) anchorPoint.x, (int) anchorPoint.y, (int) width, (int) height, null);
} }
} }
/** /**
* @return Git aktuelle verwendete Schriftart. * @return Die aktuell verwendete Schriftart.
*/ */
public Font getFont() { public Font getFont() {
return shapeDelegate.getFont(); return shapeDelegate.getFont();