1

在某些设备上,位图形式的图像对于要容纳它们的 ImageView 来说似乎太大了。

图像将通过相机和网络获取。它们将在允许您移动图像、缩放等以查看缺陷的活动中一次显示 1 个。

似乎在使用来自相机的图像时,我们得到“位图太大而无法上传到纹理中”。

我不想硬编码比例,但我想拍摄任何图像,并通过位图工厂,生成适合 Imageview 的图像。然后我会拍摄该图像,因为它不是太大,并通过将矩阵与 ImageView 相关联来捏缩放它。

4

1 回答 1

1

我正在查看 stackoverflow 以了解如何解决此问题。我得出以下结论:

  1. 它基于一个单独的设备 GL_MAX_TEXTURE_SIZE,根据:“位图太大而无法上传到纹理中”和 jptsetung 的答案以及也指向硬件加速活动的基础评论 - 如何获得 OpenGL 纹理大小限制?这让 Romain Guy 给出了深刻的理解。
  2. 您需要了解您的设备可以处理哪些类型的数据。
  3. 当您执行以下代码时,使用 2 将缩小图像大小的四分之一。

    BitmapFactory.Options ops = new BitmapFactory.Options();
    opts.inSampleSize = 2;
    

    这种理解来自这样一个概念,即它将宽度和高度减半,因此尺寸减半。

  4. 如果您不想像我一样对其进行硬编码。您可以使用 GL_MAX_TEXTURE_SIZE 来帮助确定它是什么。

最后一点,我所做的是我使用位图获取图像视图,并为其分配一个 MATRIX,然后将矩阵缩放

Matrix m = new Matrix();
m.postScale(scaleX,scaleY);

这使您可以获取图像样本以使其更小,然后将其放大以保持相同的大小。inSampleSize 是 scaleX 和 scaleY 的大小,以使其按比例放大。

可能的问题:像素化。根据图像的大小,它不会太糟糕,但你会看到一些。

这是为了解决设备的限制。我会检查图像的宽度和高度有多大,如果它 > GL_MAX_TEXTURE_SIZE,它会做一些数学运算并使其低于 balue。

我相信下一个标准的事情是:

  1. ...

  2. 利润!

于 2012-10-10T19:19:03.387 回答