4

したがって、深度が 32 ビットの画像がありますが、それを SQLite データベースの BLOB に変換し、次のコードで再度読み取ると、深度は 24 ビットしかありません (品質が低いため、同じ品質であること)。深度を 32 ビットにするにはどうすればよいですか? :

DatabaseHandler db = new DatabaseHandler(camera.this);
            List<Database> contacts = db.getAllContacts();
            for (Database contact : contacts) {
                    BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();
                    bmpFactoryOptions.inPreferredConfig = Bitmap.Config.ARGB_8888;
                    //bmpFactoryOptions.inScaled = false;
                    bmpFactoryOptions.outHeight = 240;
                    bmpFactoryOptions.outWidth = 320;
                    // decodes the blob back into a bitmap
                    byte[] blob = contact.getMP();
                    ByteArrayInputStream inputStream = new ByteArrayInputStream(blob);
                    Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
                    Bitmap scalen = Bitmap.createScaledBitmap(bitmap, 320, 240, false);

エンコード元は

Bitmap image15 = BitmapFactory.decodeResource(getResources(),R.drawable.wolverineklein);

            // convert bitmap to byte
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            image15.compress(Bitmap.CompressFormat.JPEG, 100, stream);
            byte imageInByte1[] = stream.toByteArray();

左は入力画像 (32 ビット深度) のプロパティで、右は出力画像 (24 ビット深度) です。

4

1 に答える 1

3

Android には 24 ビット深度などというものはありません。ビットマップは、8 ビット (ALPHA 8 フォーマットの半透明のみ、またはパレット形式の場合は null 設定)、16 ビット (半透明なしの 565 RGB フォーマット、または半透明ありの 4444 RGBA フォーマット)、または 32 ビット (半透明ありの 8888 RGBA フォーマット) のいずれかです。

更新: これは、アルファ チャネルがないことを意味します。どちらの場合も、色は 24 ビットを使用してエンコードされます。

于 2013-05-18T20:06:11.570 に答える