我在标题中避免使用位图作为位图,通常(?)指的是基础图像中的位图。
我有一个被分割成许多不同区域的图像。对于每个区域,我都有一个1和0的映射(位图),其中1表示区域内部,0表示区域外。并非图像的每个部分都覆盖有区域,并且区域可能重叠。图像的尺寸为(480x360)。
我想要做的是用鼠标覆盖区域时用透明的红色覆盖图像。我的问题是我当前的方法非常慢,并且在叠加层出现之前需要一两秒钟。
我目前的方法是在我的ImagePanel上使用JLayer(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之外的其他方式接受建议。我可以在某些&#34; magic&#34;中使用我的位图吗?用一些摆动法的方式?我可以将它与BufferedImage的底层位图混合使用吗?移除透明度是唯一可以帮助我的事情吗? (这是我想保留的东西)
其他两个与问题无关的问题,但我还没有解决: