Эффективный способ окраски областей изображения с прозрачным наложением с карты [1,0]
Я избегал слова растрового изображения в заголовке, поскольку растровое изображение в этом контексте обычно (?) Относится к растровому изображению из базового изображения.
У меня есть изображение, которое разделено на несколько разных регионов. Для каждого региона у меня есть карта единиц и нулей (растровое изображение), где 1 представляет внутри области, а ноль за пределами области. Не каждая часть изображения покрыта областью, и области могут перекрываться. Изображения имеют размер (480x360).
Что я хотел бы сделать, так это наложить прозрачное красное изображение, когда вы наводите область мышью. Моя проблема в том, что мой текущий метод очень медленный, и наложение на секунду занимает одну или две секунды.
Мой текущий подход заключается в использовании JLayer поверх моей ImagePanel (расширение JPanel для рисования BufferedImage). Затем мой экземпляр LayerUI рисует наложение при перемещении мыши:
public class ImageHighlightLayerUI extends LayerUI<JPanel> {
private boolean mouseActive;
private Point mousePoint;
private byte[][][] masks;
public void paint(Graphics g, JComponent c) {
super.paint(g, c);
if (mouseActive) {
byte[][] curMask = null;
// Find which region the mouse intersect
for (int i = 0; i < masks.length; i++) {
if (masks[i][mousePoint.x][mousePoint.y] == 1) {
curMask = masks[i];
break;
}
}
// Outside region --> don't draw overlay
if (curMask == null) return;
//Transparent red
g.setColor(new Color((float)1.0,
(float)0.0, (float)0.0, (float)0.8));
//Draw the mask
for(int x = 0; x < curMask.length; x++)
for(int y = 0; y < curMask[y].length; y++)
if (curMask[x][y] == 1)
g.fillRect(x, y, 1, 1);
}
}
}
Итак, как я могу сделать это более эффективным? Я открыт для предложений, используя другие способы, чем JLayer. Могу ли я использовать свое растровое изображение каким-то "волшебным" способом с помощью метода колебания? Могу ли я смешать его с базовым растровым изображением из BufferedImage? Является ли удаление прозрачности единственной вещью, которая поможет мне? (Что я хотел бы сохранить)
Две другие побочные проблемы, которые не обязательно связаны с вопросом, но мне еще предстоит решить:
- Оверлей перекрашивается каждый раз, когда движется мышь. Это кажется пустой тратой ресурсов.
- Когда регионы перекрываются, как мне выбрать, какой из них рисовать?