すぐに、AvoidXfermodeを使用して、変更したい色だけを再描画することができます。希望する色に切り替えることができます。あなたはこのような何かを実行する必要があります。
// will change red to green
Paint change1 = new Paint();
change1.setColor(Color.GREEN);
change1.setXfermode(new AvoidXfermode(Color.RED, 245, AvoidXfermode.Mode.TARGET));
Canvas c = new Canvas();
c.setBitmap(chart);
c.drawRect(0, 0, width, height, change1);
// rinse, repeat for other colors
あなたはAvoidXfermode
のために公差でプレーする必要があるかもしれませんが、それはあなたがピクセル単位の計算よりもはるかに高速欲しいものを行う必要があります。また、あなたのチャートイメージがARGB8888モードであることを確認してください。デフォルトでは、AndroidはRGB565モードの画像で動作する傾向があります。使用したい色の計算を混乱させる傾向があります。画像がARB8888モードとの両方にあることを確認するには、Bitmap chart = chartFromServer.copy(Config.ARGB_8888, true);
Xfermodeを設定します。
明確化は:
// changes green to red
Paint change1 = new Paint();
change1.setColor(Color.GREEN);
change1.setXfermode(new AvoidXfermode(Color.RED, 245, AvoidXfermode.Mode.TARGET));
// changes white to blue
Paint change2 = new Paint();
change2.setColor(Color.BLUE);
change2.setXfermode(new AvoidXfermode(Color.WHITE, 245, AvoidXfermode.Mode.TARGET));
// ... other Paints with other changes you want to apply to this image
Canvas c = new Canvas();
c.setBitmap(chart);
c.drawRect(0, 0, width, height, change1);
c.drawRect(0, 0, width, height, change2);
//...
c.drawRect(0, 0, width, height, changeN);
:あなたはちょうどあなたがそうのように変更する適切な色で他の塗料を作成しなければならない、あなたはすべての繰り返しの画像を再ロードする必要がないと、他の色を変更するには
あなたは次のように書いています:* "実際には5色しか使用しません" *しかし注意する必要があります。 「カラー」は、OSが「カラー」とみなすものではないと考えます。 たとえば、ARGB 32ビットでは、0xFF0000は "赤"のように見えます。しかし0xFF0001もそうです。しかし、彼らは2つの異なる色です。 – Gugussee
ありがとうございますが、実際には5色しか使用していません。私はチャートが生成される場所にアクセスできるので、特別に非常に簡単にできます:) –
OK私はあなたに答えます... – Gugussee