首页 文章

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

提问于
浏览
4

我有两个目标,我想要实现 .

  • 按比例缩放位图 .

  • 缩放相同的位图,使其高度等于设备的高度 .

尝试此操作时,我发现在像素较少的设备上,缩放工作正常,但在具有更多像素的设备上,缩放会强制位图达到 4096x4096 像素限制:

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

截至目前,我使用Bitmap.createBitmap(位图源,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 回答

  • 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" />
    

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

相关问题