我从SQLiteDatabase获取图像(.png)并使用此代码将bytearray解码为位图:
Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
options.inDither = true;
options.inScaled = true;
options.inDensity = 240;
options.inTargetDensity = metrics.densityDpi;
Bitmap bmp = BitmapFactory.decodeStream(new ByteArrayInputStream(imageAsBytes), null, options);
如您所见,图像(3)应该像(2),但它不是。
1) =没有比例的图像(metrics.densityDpi = 240);
2) =上面的.png相同,但是在res / drawable中编译;
3) =缩小图像(metrics.densityDpi = 120);
我也试过options.inDither = false;
,但我认为没有区别。
我的代码出了什么问题?
答案 0 :(得分:0)
我会尝试其他一些事情:
加载png时没有比例,当您来绘制图像时(从ImageView中或直接在画布上)设置Matrix以缩放图像
或者,以所需的密度加载图像,然后尝试使用Paint对象将Bitmap直接绘制到画布上。实例化Paint后,启用位图过滤(这将提高图像质量)
setFilterBitmap(true)
最后,您始终可以加载位图(与密度无关)并使用Bitmap.createScaledBitmap手动调整位图大小,确保将第三个参数设置为true(这启用了位图过滤以提高质量)。下面是缩放位图的示例,其中100是所需的大小:
Bitmap.createScaledBitmap ( original_bitmap, 100, 100, true);
答案 1 :(得分:0)
简而言之,最佳质量降尺度算法包括两个步骤:
以下是SonyMobile如何解决此任务的详细说明:http://developer.sonymobile.com/2011/06/27/how-to-scale-images-for-your-android-application/
以下是SonyMobile scale utils的源代码:http://developer.sonymobile.com/downloads/code-example-module/image-scaling-code-example-for-android/