Android绘制图像,宽度为1029 *高度为1029像素

时间:2015-01-22 12:40:27

标签: android android-canvas android-imageview android-image android-bitmap

在我的Android应用程序中,我需要一个宽度为1029 *高度为1029像素的图像(允许使用图像中心裁剪)。原始图像的宽度和高度超过1029像素。

我尝试了以下事项。 我已将图像放在图像视图中并捕获位图,但我得到了以下异常。

Bitmap too large to be uploaded into a texture (2322x4128, max=4096x4096)

这是图像视图的布局设计。

<ImageView
    android:id="@+id/iv_try1"
    android:layout_width="425dp"
    android:layout_height="425dp"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:scaleType="centerCrop"
    android:contentDescription="@string/icd" />

(我不确定425dp会给出1029像素,只需一次尝试)。

我使用以下代码从图像视图中捕获位图。

    Bitmap b = Bitmap.createBitmap(v.getWidth(), v.getHeight(),
            Bitmap.Config.ARGB_8888);
    Canvas c = new Canvas(b);
    v.layout(0, 0, v.getLayoutParams().width, v.getLayoutParams().height);
    v.draw(c);
    // resultant bitmap is save into save in SDcard.

如何将宽度为1029 *高度1029像素分辨率的图像作为位图?提前谢谢。

1 个答案:

答案 0 :(得分:2)

作为例外情况,您的位图太大了。高度超过最大值。你可以做的是缩小位图。第一步是仅使用

加载位图的元信息
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decode*(..., o);

设置inJustDecodeBounds = true会使decode*方法返回空位图,但BitmapFactory.Options将包含位图的宽度/高度(以像素为单位)。知道这两个,你可以计算你需要将位图缩放到/ height接近你的约束(1029 px)所需的inSampleSize的值。来自inSampleSize

的文档
  

如果设置为值&gt; 1,请求解码器对原始进行二次采样   图像,返回较小的图像以节省内存。样本量是   任一维度中对应于单个像素的像素数   解码后的位图中的像素。例如,inSampleSize == 4返回一个   图像是原稿宽度/高度的1/4,和1/16   像素数。任何值&lt; = 1都被视为1.注意:   解码器使用基于2的幂的最终值,任何其他值都将   向下舍入到最接近2的幂。