настроить ширину и высоту растрового изображения в MapField в BlackBerry - PullRequest
0 голосов
/ 01 августа 2011

Я рисую круги вокруг точки местоположения в 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 круга, теперь, когда я рисую больше кругов, карта, кажется, исчезает. Может кто-нибудь сказать мне, как я могу решить эту проблему?

Ответы [ 2 ]

1 голос
/ 01 августа 2011

Я решил эту проблему, нарисовав прозрачный фон для каждого растрового изображения:

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++;
}
0 голосов
/ 01 августа 2011

Я считаю, что ваша проблема с альфа-смешением. Вы рисуете каждое изображение, одно поверх другого, приблизительно с 50% альфа. Итак, первый радиус «покрывает» половину существующей интенсивности пикселей. Тогда следующий радиус покрывает половину оставшейся интенсивности, или 75% от первоначальной интенсивности. И так далее ... каждый раз, когда вы рисуете изображение, оно все больше и больше скрывает первоначальную интенсивность.

Если вы хотите, чтобы все ваши круги имели одинаковую интенсивность, вам нужно будет переосмыслить свой подход. Например, рассмотрите возможность отрисовки всех ваших кругов в одном растровом изображении, прежде чем рисовать его поверх карты. Или подумайте, чтобы каждый больший круг оставлял 100% прозрачную «дыру» в том месте, где будут маленькие круги.

...