如何在BitmapFactory中保持图像质量相同

Dev*_*Kid 2 android bitmap bitmapfactory

我已将位图图像转换为字符串以保存它:

............
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);
Run Code Online (Sandbox Code Playgroud)

然后我从字符串中检索位图以设置活动的背景,如下所示:

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);
Run Code Online (Sandbox Code Playgroud)

一切正常,但图像质量大大降低.如何保持图像质量与原始图像相同?我在这里做错了什么,降低了质量?

msh*_*msh 9

无论您使用何种质量设置,JPEG都是有损的.如果要保持图像不变,则必须使用无损压缩.例如Bitmap.CompressFormat.PNG


Dan*_*rin 7

你在这里有图像质量和内存使用之间的权衡.看看这一行:

photo.compress(Bitmap.CompressFormat.JPEG, 100, baos);
Run Code Online (Sandbox Code Playgroud)

photo.compress很明显,在第二个参数给出的因素下,您的图像分辨率会降低,不幸的是,这是您可以获得的最佳质量,因为在0到100之间,100表示​​您可以获得的最佳质量.现在,您有另一种选择,根据原始图片的大小,您只需保存图像而不压缩它,但请注意,大多数情况下这不起作用,Jalvik可以抛出OutofMemoryException,希望这会有所帮助.