我想实现两个目标。
尝试此操作时,我发现在像素较少的设备上,缩放效果很好,但在具有更多像素的设备上,缩放会强制位图达到 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"/>
如果有任何其他比例方法将位图缩放到整个屏幕,我将非常感谢这些建议。
答案 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" />
那是因为你不需要占据占据整个父母的东西,而你也不会使用矩阵来扩展。