我创建了一个将位图直接缩放到特定表面积的函数。该函数首先获取位图的宽度和高度,然后找到最接近所需大小的样本大小。最后,将图像缩放到确切的尺寸。这是我发现解码缩放位图的唯一方法。问题是从BitmapFactory.createScaledBitmap(src,width,height,filter)返回的位图总是以-1的宽度和高度返回。我已经实现了使用createScaledBitmap()方法的其他函数,并且没有出现此错误,并且我找不到创建缩放位图会产生无效输出的任何原因。我还发现,如果创建可变的图像位图副本,则会导致相同的错误。谢谢

public static Bitmap load_scaled_image( String file_name, int area) {
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(file_name, options);
    double ratio = (float)options.outWidth / (float)options.outHeight;
    int width, height;
    if( options.outWidth > options.outHeight ) {
        width = (int)Math.sqrt(area/ratio);
        height = (int)(width*ratio);
    }
    else {
        height = (int)Math.sqrt(area/ratio);
        width = (int)(height*ratio);
    }
    BitmapFactory.Options new_options = new BitmapFactory.Options();
    new_options.inSampleSize = Math.max( (options.outWidth/width), (options.outHeight/height) );
    Bitmap image = BitmapFactory.decodeFile(file_name, new_options);
    return Bitmap.createScaledBitmap(image, width, height, true);
}


我添加了此功能,可将大型摄像机图像缩放到特定数量的百万像素。因此,传入的典型面积为1百万像素为1000000。解码后的摄像机图像输出的outWidth为1952,outHieght为3264。然后,我用这种方法计算该比例,以便与缩放后的图像保持相同的高宽比,在这种情况下,该比例为0.598。比率和新的表面积,我可以找到新的宽度773和高度1293。773x1293 = 999489大约是1兆像素。接下来,我计算要为其解码新图像的样本大小,在这种情况下,样本大小为4,并且将图像解码为976x1632。因此,我通过的宽度为773,高度为1293。

最佳答案

我遇到了类似的问题(缩放位图的高度和宽度为-1)。
在此stackOverflow线程之后:
Android how to create runtime thumbnail
在调用函数时,我尝试两次使用相同的位图:

imageBitmap = Bitmap.createScaledBitmap(imageBitmap, THUMBNAIL_SIZE,
                                        THUMBNAIL_SIZE, false);


由于某种原因,这解决了我的问题,也许也可以解决您的问题。

关于android - 创建缩放的位图会导致图像无效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5973595/

10-14 10:16