web-dev-qa-db-ja.com

Bitmap.Config.RGB_565を使用してメモリ内のビットマップをビットマップに変換する

設定をBitmap.Config.RGB_565に設定するために変換したいビットマップがロードされています。ビットマップがすでにメモリにロードされた後、Bitmapをこの構成に変換する簡単な方法はありますか?たとえば、以下では、アプリケーションリソースからデコードされているビットマップがありますが、すでにロードされているBitmapRGB_565に変換するにはどうすればよいですか?簡単なことだと思いますが、ビットマップの操作はかなり初めてで、数時間オンラインで調べた後、残念ながら、特に必要なものが見つかりませんでした。

BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig=Bitmap.Config.RGB_565
bitmap=BitmapFactory.decodeResource(getResources(), R.drawable.myphoto ,options);
18
Euthyphro

私はこれをテストしていませんが、動作するはずです:

private Bitmap convert(Bitmap bitmap, Bitmap.Config config) {
    Bitmap convertedBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), config);
    Canvas canvas = new Canvas(convertedBitmap);
    Paint paint = new Paint();
    Paint.setColor(Color.BLACK);
    canvas.drawBitmap(bitmap, 0, 0, Paint);
    return convertedBitmap;
}

次のようなメソッドを呼び出します。

Bitmap convertedBitmap = convert(bitmap, Bitmap.Config.RGB_565);

マトリックスでdrawBitmapを使用すると、回転、ストレッチなど、あらゆる種類の追加の変換を実行できます。

26

これを試すこともできます:

Bitmap converted = original.copy(Config.RGB_565, false);

Bitmap.copy()の ドキュメント から:

このビットマップのサイズに基づいて新しいビットマップを作成し、新しいビットマップの構成を指定されたものに設定してから、このビットマップのピクセルを新しいビットマップにコピーしようとします。変換がサポートされていない場合、またはアロケータが失敗した場合、これはNULLを返します。

ネイティブソースコードを見ると、 Bitmap.Config の任意の値の間でうまく変換できるはずです。

22
sa.shadow

ここで答えを見つけました https://stackoverflow.com/a/12148450/136467 、おかげで siliconeagle

解決策は、上記の例のリンクに従って、必要なエンコーディングで新しいビットマップを作成することです。

0
Euthyphro