如何缩放大于4096像素的位图?

时间:2014-07-23 00:30:41

标签: android matrix bitmap scale fullscreen

我想实现两个目标。

  1. 按比例缩放位图。
  2. 缩放相同的位图,使其高度等于设备的高度。
  3. 尝试此操作时,我发现在像素较少的设备上,缩放效果很好,但在具有更多像素的设备上,缩放会强制位图达到 4096x4096 像素限制:

    W/OpenGLRenderer(10630): Bitmap too large to be uploaded into a texture (4476x885, max=4096x4096)
    

    截至目前,我正在使用Bitmap.createBitmap(Bitmap source,int x,int y,int width,int height)来缩放我的位图:

    float conversion = (float) view.getHeight() / (float) originalBitmap.getHeight();
    
    Matrix mat = new Matrix();
    mat.postScale(conversion,conversion);
    
    Bitmap resizedBitmap =
         Bitmap.createBitmap(originalBitmap,0,0,originalBitmap.getWidth(),
         originalBitmap.getHeight(), mat, false);
    imageView.setImageBitmap(resize);
    

    以上代码与以下xml相结合,允许位图缩放整个屏幕:

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:scaleType="matrix"/>
    

    如果有任何其他比例方法将位图缩放到整个屏幕,我将非常感谢这些建议。

1 个答案:

答案 0 :(得分:4)

使用Bitmap.createScaledBitmap(Bitmap src, int dstWidth, int dstHeight, boolean filter); 其中dstWidth和dstHeight分别是所需的宽度和高度。 (过滤器只是尝试平滑边缘,如果它是真的,并且如果它是假的则不会,如here所示。)这不需要Matrix参数或所需位置,它只返回缩放位图。

以下内容可能对您有用:

Bitmap resizedBitmap = 
     Bitmap.createScaledBitmap(originalBitmap, 
     originalBitmap.getWidth() * (view.getHeight() / originalBitmap.getHeight()),
     view.getHeight());
imageView.setImageBitmap(resizedBitmap);

您现在可能只需要这么多的XML:

<ImageView
     android:id="@+id/imageView1"
     android:layout_width="match_parent"
     android:layout_height="match_parent" />

那是因为你不需要占据占据整个父母的东西,而你也不会使用矩阵来扩展。