Create new class to have better scaling for markers with MapView.
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
package org.insa.graphics.drawing.overlays;
|
||||
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Image;
|
||||
import java.awt.image.BufferedImage;
|
||||
|
||||
import org.mapsforge.core.graphics.Canvas;
|
||||
import org.mapsforge.core.model.BoundingBox;
|
||||
import org.mapsforge.core.model.LatLong;
|
||||
import org.mapsforge.core.model.Point;
|
||||
import org.mapsforge.map.awt.graphics.AwtBitmap;
|
||||
import org.mapsforge.map.layer.overlay.Marker;
|
||||
|
||||
public class MarkerAutoScaling extends Marker {
|
||||
|
||||
// Original image.
|
||||
private final Image originalImage;
|
||||
|
||||
public MarkerAutoScaling(LatLong latLong, Image image) {
|
||||
super(latLong, null, 0, 0);
|
||||
this.originalImage = image;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
public Image getImage() {
|
||||
return originalImage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void draw(BoundingBox boundingBox, byte zoomLevel, Canvas canvas, Point topLeftPoint) {
|
||||
int width = (int) PaintUtils.getStrokeWidth(12, zoomLevel),
|
||||
height = (int) PaintUtils.getStrokeWidth(24, zoomLevel);
|
||||
BufferedImage bfd = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR);
|
||||
Graphics2D g = bfd.createGraphics();
|
||||
g.drawImage(this.originalImage.getScaledInstance(bfd.getWidth(), bfd.getHeight(), Image.SCALE_SMOOTH), 0, 0,
|
||||
null);
|
||||
setBitmap(new AwtBitmap(bfd));
|
||||
|
||||
setVerticalOffset(-height / 2);
|
||||
super.draw(boundingBox, zoomLevel, canvas, topLeftPoint);
|
||||
g.dispose();
|
||||
}
|
||||
}
|
@@ -1,7 +1,6 @@
|
||||
package org.insa.graphics.drawing.overlays;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Image;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.DataInputStream;
|
||||
@@ -17,7 +16,7 @@ public class MarkerUtils {
|
||||
* @param color
|
||||
* @return
|
||||
*/
|
||||
public static BufferedImage getMarkerForColor(Color color) {
|
||||
public static Image getMarkerForColor(Color color) {
|
||||
// create image
|
||||
int[][] mask = readMarkerMask();
|
||||
BufferedImage image = new BufferedImage(mask[0].length, mask.length, BufferedImage.TYPE_4BYTE_ABGR);
|
||||
@@ -31,13 +30,7 @@ public class MarkerUtils {
|
||||
}
|
||||
}
|
||||
|
||||
BufferedImage scaleImage = new BufferedImage(28, 48, BufferedImage.TYPE_4BYTE_ABGR);
|
||||
Graphics2D graphics = scaleImage.createGraphics();
|
||||
graphics.drawImage(image.getScaledInstance(28, 48, Image.SCALE_SMOOTH), 0, 0, null);
|
||||
graphics.dispose();
|
||||
|
||||
// Create Bitmap and return it.
|
||||
return scaleImage;
|
||||
return image;
|
||||
}
|
||||
|
||||
// Mask cache
|
||||
|
Reference in New Issue
Block a user