私のアプリケーションには、いくつかのビットマップをレンダリングし、を使用してそれらをビューのキャンバスに描画するカスタムビューがありますonDraw()
。キャンバスは最初は色で塗りつぶされています。基本的に私は次のコードを持っています:
public static int COLOR = Color.rgb(200, 50, 50);
@Override
public void onDraw(Canvas canvas) {
canvas.drawColor(COLOR);
Bitmap bitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.RGB_565);
Canvas c = new Canvas(bitmap);
c.drawColor(COLOR);
canvas.drawBitmap(bitmap, 0, 0, null);
}
コードが継続的に赤い画面を作成することを期待しています。ただし、ビットマップは別の赤の色合いでレンダリングされるため、その位置が表示されます。色を分析するために、スクリーンショットを作成しました。ビットマップはの(206,48,49)
代わりに描画され(200,50,50)
ます。
明らかに、これはARGB_8888の代わりにRGB_565を使用するビットマップに関係している必要があります(私は使用したくありません)。だから私の質問は、これらの色の問題を回避するために、ビューのキャンバスをRGB_565色で塗りつぶすにはどうすればよいですか?
(200,50,50)
最下位ビット(、、)を削除してRGB_565にred >> 3
変換しようとしましたがgreen >> 2
、blue >> 3
もちろんここでは違いはありません。Androidは内部で何を取得(206,48,49)
し(200,50,50)
ますか?推論の誤りはどこにありますか?