相关疑难解决方法(0)

在Android上将大型位图文件的大小调整为缩放输出文件

我在一个文件中有一个大位图(比如3888x2592).现在,我想将该位图的大小调整为800x533并将其保存到另一个文件中.我通常会通过调用Bitmap.createBitmap方法来缩放位图,但它需要一个源位图作为第一个参数,我无法提供,因为将原始图像加载到Bitmap对象当然会超出内存(例如,请参见此处).

我也无法读取位图,例如,BitmapFactory.decodeFile(file, options)提供a BitmapFactory.Options.inSampleSize,因为我想将其调整为精确的宽度和高度.使用inSampleSize会将位图的大小调整为972x648(如果我使用inSampleSize=4)或778x518(如果我使用inSampleSize=5,它甚至不是2的幂).

我还想避免使用inSampleSize在第一步中使用例如972x648读取图像,然后在第二步中将其大小调整为800x533,因为与直接调整原始图像大小相比,质量会很差.

总结我的问题:是否有办法读取10MP或更高的大图像文件并将其保存到新的图像文件,调整大小到特定的新宽度和高度,而不会得到OutOfMemory异常?

我也尝试BitmapFactory.decodeFile(file, options)手动将Options.outHeight和Options.outWidth值设置为800和533,但它不起作用.

android resize image bitmap

214
推荐指数
8
解决办法
22万
查看次数

为什么我不使用BitmapFactory的inPurgeable选项?

Android BitmapFactory.Options.inPurgeable已被推荐用于各种地方,以避免Android 2.x及更早版本中的OutOfMemory异常(Android 3.1 修复此问题).

如果inPurgeable太棒了,为什么我不想用它?有关此选项正在执行的操作的详细信息,文档似乎非常清晰:

如果将其设置为true,则生成的位图将分配其像素,以便在系统需要回收内存时可以清除它们.在那种情况下,当需要再次访问像素时(例如,绘制位图,调用getPixels()),它们将被自动重新解码

看起来很棒.有什么收获?

android bitmap

23
推荐指数
1
解决办法
1万
查看次数

缩放位图的方法之间的区别

在Android中至少有两种缩放位图的方法,一种是在解码位图源时在"BitmapFactory.Options"中使用"inScaled,inDensity,inTargetDensity".另一种是在"Bitmap.createBitmap"中使用"Matrix".

我很好奇的是这两种方法的区别是什么?生成的位图的质量如何?内存使用情况怎么样?等等...

android bitmap matrix scale

8
推荐指数
1
解决办法
4836
查看次数

从InputStream调整位图大小

我试图从InputStream调整一个图像的大小,所以我在将图像加载到Bitmap对象时使用Strange内存中的代码问题,但我不知道为什么这个代码总是返回没有图像的Drawable.

这个很好用:

private Drawable decodeFile(InputStream f){
    try {
        InputStream in2 = new BufferedInputStream(f);
        BitmapFactory.Options o2 = new BitmapFactory.Options();
        o2.inSampleSize=2;
        return new BitmapDrawable(BitmapFactory.decodeStream(in2, null, o2));
    } catch (Exception e) {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

这个不起作用:

private Drawable decodeFile(InputStream f){
    try {
        InputStream in1 = new BufferedInputStream(f);
        InputStream in2 = new BufferedInputStream(f);
        //Decode image size
        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true;
        BitmapFactory.decodeStream(in1,null,o);

        //The new size we want to scale to
        final int IMAGE_MAX_SIZE=90;

        //Find …
Run Code Online (Sandbox Code Playgroud)

android bitmap resize-image

5
推荐指数
1
解决办法
6967
查看次数

标签 统计

android ×4

bitmap ×4

image ×1

matrix ×1

resize ×1

resize-image ×1

scale ×1