0

以下のコードのように、MapField のロケーション ポイントの周りに円を描いています。

 public void drawCircleMap(int [] radius)
{
   int i = 0;
    Graphics graphics = null;
    int x2,y2;
    bmparr = new Bitmap[radius.length];
    for(int j=0;j<radius.length;j++)
    {
                XYPoint fieldOut = new XYPoint();
                convertWorldToField(mPoints[1], fieldOut);
                x2 = fieldOut.x;
                y2 = fieldOut.y;
                bmparr[i] = new Bitmap(getWidth(), getHeight());
                bmparr[i].createAlpha(Bitmap.ALPHA_BITDEPTH_8BPP);
                graphics = Graphics.create( bmparr[i]);
                graphics.setColor(Color.BLUE);
                graphics.drawEllipse(x2, y2, x2+radius[j], y2, x2,y2+radius[j], 0, 360);
                graphics.fillEllipse(x2, y2, x2+radius[j], y2, x2,y2+radius[j], 0, 360);
                i++;
    }

}

protected void paint(Graphics graphics) {
    super.paint(graphics);

    for(int i =0 ;i < bmparr.length;i++)
    {
        graphics.setGlobalAlpha(100);
        graphics.drawBitmap(0, 0,  bmparr[i].getWidth(), bmparr[i].getHeight(), bmparr[i], 0, 0);
    }

}

4 つの円を描画したいのですが、さらに多くの円を描画すると、マップがフェードアウトするように見えます。この問題を解決する方法を教えてください。

4

2 に答える 2

1

すべてのビットマップに透明な背景を描画することで、この問題を解決しました。

bmparr = new Bitmap[radius.length];
for(int j=0;j<radius.length;j++)
{
  XYPoint fieldOut = new XYPoint();
  convertWorldToField(mPoints[1], fieldOut);
  x2 = fieldOut.x;
  y2 = fieldOut.y;
  bmparr[i] = new Bitmap(getWidth(), getHeight());
  bmparr[i].createAlpha(Bitmap.ALPHA_BITDEPTH_8BPP);
  int[] argb = new int[getWidth() * getHeight()];
  bmparr[i].getARGB(argb, 0, getWidth(), 0, 0, getWidth(), getHeight());
  for(int k = 0; k < argb.length; k++)
  {
      argb[k] = 0x00000000;
  }
  bmparr[i].setARGB(argb, 0, getWidth(), 0, 0, getWidth(), getHeight());
  graphics = Graphics.create( bmparr[i]);
  graphics.setColor(Color.BLUE);
  graphics.drawEllipse(x2, y2, x2+radius[j], y2, x2,y2+radius[j], 0, 360);
  graphics.fillEllipse(x2, y2, x2+radius[j], y2, x2,y2+radius[j], 0, 360);
  i++;
}
于 2011-08-01T14:20:26.137 に答える
0

あなたの問題はアルファブレンディングにあると思います。約50%のアルファで、各画像を重ねて描画しています。したがって、最初の半径は既存のピクセル強度の半分を「カバー」します。次に、次の半径は残りの強度の半分、つまり元の強度の75%をカバーします。など...画像を描画するたびに、元の強度がますます覆われます。

すべてのサークルに共通の強度を持たせたい場合は、アプローチを再考する必要があります。たとえば、地図の上に円を描く前に、すべての円を1つのビットマップに描くことを検討してください。または、大きな円ごとに、小さな円が配置される100%透明な「穴」を残すことを検討してください。

于 2011-08-01T03:03:57.447 に答える