Improve markers rendering.
This commit is contained in:
parent
2f1fa81a58
commit
55dfcbd0fe
BIN
res/marker_mask.bin
Normal file
BIN
res/marker_mask.bin
Normal file
Binary file not shown.
@ -91,19 +91,20 @@ public class BasicDrawing extends JPanel implements Drawing {
|
|||||||
|
|
||||||
private class BasicMarkerOverlay extends BasicOverlay implements MarkerOverlay {
|
private class BasicMarkerOverlay extends BasicOverlay implements MarkerOverlay {
|
||||||
|
|
||||||
// Default marker width
|
|
||||||
private static final int DEFAULT_MARKER_WIDTH = 20;
|
|
||||||
|
|
||||||
// Point of the marker.
|
// Point of the marker.
|
||||||
private Point point;
|
private Point point;
|
||||||
|
|
||||||
// Color of the marker.
|
// Color of the marker.
|
||||||
private final Color color;
|
private final Color color;
|
||||||
|
|
||||||
|
// Image to draw
|
||||||
|
private final BufferedImage image;
|
||||||
|
|
||||||
public BasicMarkerOverlay(Point point, Color color) {
|
public BasicMarkerOverlay(Point point, Color color) {
|
||||||
super();
|
super();
|
||||||
this.point = point;
|
this.point = point;
|
||||||
this.color = color;
|
this.color = color;
|
||||||
|
this.image = MarkerUtils.getMarkerForColor(color);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -128,12 +129,8 @@ public class BasicDrawing extends JPanel implements Drawing {
|
|||||||
int px = BasicDrawing.this.projx(getPoint().getLongitude());
|
int px = BasicDrawing.this.projx(getPoint().getLongitude());
|
||||||
int py = BasicDrawing.this.projy(getPoint().getLatitude());
|
int py = BasicDrawing.this.projy(getPoint().getLatitude());
|
||||||
|
|
||||||
BufferedImage img = MarkerUtils.getMarkerForColor(color);
|
graphics.drawImage(this.image, px - this.image.getWidth() / 2, py - this.image.getHeight(),
|
||||||
Graphics2D gr = img.createGraphics();
|
BasicDrawing.this);
|
||||||
double scale = DEFAULT_MARKER_WIDTH / (double) img.getHeight();
|
|
||||||
gr.scale(scale, scale);
|
|
||||||
|
|
||||||
graphics.drawImage(img, px - img.getWidth() / 2, py - img.getHeight(), BasicDrawing.this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -1,19 +1,15 @@
|
|||||||
package org.insa.graphics.drawing.overlays;
|
package org.insa.graphics.drawing.overlays;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
|
import java.awt.Graphics2D;
|
||||||
|
import java.awt.Image;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.io.DataInputStream;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
|
||||||
public class MarkerUtils {
|
public class MarkerUtils {
|
||||||
|
|
||||||
/**
|
private static final String MARKER_MASK_FILE = "res/marker_mask.bin";
|
||||||
* Return a color mapping with the given color as the main color.
|
|
||||||
*
|
|
||||||
* @param color
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
protected static Color[] getColorMapping(Color color) {
|
|
||||||
return new Color[] { new Color(0, 0, 0, 0), color, Color.BLACK };
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a Bitmap representing a marker of the given color.
|
* Create a Bitmap representing a marker of the given color.
|
||||||
@ -23,83 +19,55 @@ public class MarkerUtils {
|
|||||||
*/
|
*/
|
||||||
public static BufferedImage getMarkerForColor(Color color) {
|
public static BufferedImage getMarkerForColor(Color color) {
|
||||||
// create image
|
// create image
|
||||||
BufferedImage image = new BufferedImage(MARKER_MASK[0].length, MARKER_MASK.length,
|
int[][] mask = readMarkerMask();
|
||||||
BufferedImage.TYPE_4BYTE_ABGR);
|
BufferedImage image = new BufferedImage(mask[0].length, mask.length, BufferedImage.TYPE_4BYTE_ABGR);
|
||||||
|
|
||||||
Color[] map = getColorMapping(color);
|
// Color[] map = getColorMapping(color);
|
||||||
|
int rgb = color.getRGB() & 0x00ffffff;
|
||||||
for (int i = 0; i < image.getHeight(); ++i) {
|
for (int i = 0; i < image.getHeight(); ++i) {
|
||||||
for (int j = 0; j < image.getWidth(); ++j) {
|
for (int j = 0; j < image.getWidth(); ++j) {
|
||||||
image.setRGB(j, i, map[MARKER_MASK[i][j]].getRGB());
|
// image.setRGB(j, i, map[MARKER_MASK[i][j]].getRGB());
|
||||||
|
image.setRGB(j, i, rgb | (mask[i][j] << 24));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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.
|
// Create Bitmap and return it.
|
||||||
return image;
|
return scaleImage;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mask cache
|
||||||
|
private static int[][] MASK_CACHE = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Retrieve the mask from the mask file or from the cache.
|
||||||
|
*/
|
||||||
|
private static int[][] readMarkerMask() {
|
||||||
|
if (MASK_CACHE == null) {
|
||||||
|
try {
|
||||||
|
DataInputStream dis = new DataInputStream(new FileInputStream(MARKER_MASK_FILE));
|
||||||
|
|
||||||
|
int nrows = dis.readInt();
|
||||||
|
int ncols = dis.readInt();
|
||||||
|
|
||||||
|
MASK_CACHE = new int[nrows][ncols];
|
||||||
|
for (int i = 0; i < nrows; ++i) {
|
||||||
|
for (int j = 0; j < ncols; ++j) {
|
||||||
|
MASK_CACHE[i][j] = dis.readUnsignedByte();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dis.close();
|
||||||
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
MASK_CACHE = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return MASK_CACHE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mask
|
|
||||||
private static byte[][] MARKER_MASK = new byte[][] {
|
|
||||||
// @formatter:off
|
|
||||||
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0},
|
|
||||||
{0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0},
|
|
||||||
{0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0},
|
|
||||||
{0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0},
|
|
||||||
{0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0},
|
|
||||||
{0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0},
|
|
||||||
{0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
|
|
||||||
{0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
|
|
||||||
{0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
|
|
||||||
{1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1},
|
|
||||||
{1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1},
|
|
||||||
{1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1},
|
|
||||||
{1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1},
|
|
||||||
{1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1},
|
|
||||||
{1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1},
|
|
||||||
{1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1},
|
|
||||||
{0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
|
|
||||||
{0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
|
|
||||||
{0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
|
|
||||||
{0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0},
|
|
||||||
{0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0},
|
|
||||||
{0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0},
|
|
||||||
{0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0},
|
|
||||||
{0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0},
|
|
||||||
{0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user