2011-07-31 2 views
0
にMapField内のビットマップの幅と高さを調整

Iは、下記のコードのようにMapFieldに位置する点の周りの円を描いています:は、BlackBerry

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つの円を描きたい、今私は円の数を描くように、マップは消えているようだ、誰かが私はこの問題を解決する方法を教えてくださいできますか?

+0

あなたは本当に質問への答えとして、あなたのソリューションを追加し、それを受け入れる必要があります。このようにして、同様の問題を探している人は、この質問に対する解決策があることを一目で見ることができます。 –

答えて

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++; 
} 
0

あなたの問題はアルファブレンディングと思われます。約50%のアルファで、それぞれの画像を上に重ねて描画します。したがって、第1の半径は、既存のピクセル強度の半分を「カバー」する。次に、次の半径は残りの強度の半分、または元の強度の75%をカバーします。そういうわけで...あなたがイメージを描くたびに、それは元々の強さをますます隠しています。

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

+0

お寄せいただきありがとうございます、私は私の問題を解決しました。 – Suppi