2

ビットマップ画像を文字列に変換して保存しました:

............
Bitmap photo = extras.getParcelable("data");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
photo.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] b = baos.toByteArray();
String encodedImage = Base64.encodeToString(b, Base64.DEFAULT);

次に、文字列からビットマップを取得して、アクティビティの背景を次のように設定します。

byte[] temp = Base64.decode(encodedImage, Base64.DEFAULT);
Options options = new BitmapFactory.Options();
options.inScaled = false;
Bitmap bitmap = BitmapFactory.decodeByteArray(temp, 0,
                temp.length, options);
Drawable d = new BitmapDrawable(getResources(), bitmap);
getWindow().setBackgroundDrawable(d);

すべて正常に動作しますが、画質が大幅に低下します。元の画像と同じ画質を維持するにはどうすればよいですか? ここで何か間違ったことをしたので、品質が低下しましたか?

4

2 に答える 2

11

使用する品質設定に関係なく、JPEG は不可逆です。画像を変更しない場合は、可逆圧縮を使用する必要があります。たとえば、Bitmap.CompressFormat.PNG

于 2013-05-25T08:24:29.037 に答える
8

ここでは、画質とメモリ使用量の間でトレードオフの状況が発生しています。この行を見てください:

photo.compress(Bitmap.CompressFormat.JPEG, 100, baos);

photo.compressは、2 番目のパラメーターで指定された係数で画像の解像度を明らかに低下させます。残念ながら、0 から 100 の間で、100 が取得できる最高の品質を表すため、これが取得できる最高の品質です。元の画像のサイズによっては、画像を圧縮せずに保存することもできますが、ほとんどの場合、これは機能せず、Jalvik が OutofMemoryException をスローする可能性があることに注意してください。これが役立つことを願っています。

于 2013-05-25T01:36:17.797 に答える