小编Yoo*_*Lee的帖子

使用Android的Bitmap类的getPixels()以及如何使用它

我正在尝试在Android中进行一些图像处理.我需要获取位图的一大块像素信息.所以我尝试使用其中一个Bitmap类方法getPixels().但是,似乎我没有正确使用它,或者我误解了方法行为的唯一目的.

例如,我正在做以下操作,以便从任意位置(位图坐标)x,y获得位图的10乘10区域的像素信息.

Bitmap bitmap = BitmapFactory.decodeFile(filePath);
int[] pixels = new int[100];
bitmap.getPixels(pixels, 0, bitmap.getWidth(), x, y, 10, 10);
Run Code Online (Sandbox Code Playgroud)

而且我得到了ArrayIndexOutOfBoundsException.我一直在谷歌上看看我做错了什么,但我一无所知.关于使用getPixels()的大多数示例或问题通常用于提取整个图像的像素信息的情况.因此int数组的大小通常是bitmap.getWidth()*bitmap.getHeight(),x和y值是0,0,宽度,高度是位图的宽度和高度.

Bitmap的getPixels()是不是为了我的目的而设计的(获取位图子区域的一大块像素信息)?还是我错误地使用它?有没有其他方法可以做到这一点,也许使用不同的类?

如果有人对此有所说,我将不胜感激.谢谢.

android pixel bitmap

11
推荐指数
2
解决办法
2万
查看次数

某些设备上没有显示OpenGL ES 2.0纹理

我找到了一个名为Rajawali的 Android 3D图形框架,我正在学习如何使用它.我遵循了最基本的教程,该教程使用1024x512大小的jpg图像渲染一个shpere对象.它在Galaxy Nexus上运行良好,但它在Galaxy Player GB70上无效.

当我说它不起作用时,我的意思是对象出现但纹理没有渲染.最后,在创建纹理并使其工作时,我更改了一些用于Rajawali框架的参数.这是我发现的.

原因来自于GL_TEXTURE_MIN_FILTER设定的地方.在以下四个值中

GLES20.GL_LINEAR_MIPMAP_LINEAR
GLES20.GL_NEAREST_MIPMAP_NEAREST
GLES20.GL_LINEAR
GLES20.GL_NEAREST
Run Code Online (Sandbox Code Playgroud)

仅当GL_TEXTURE_MIN_FILTER未使用mipmap将过滤器设置为过滤器时,才会呈现纹理.因此,当GL_TEXTURE_MIN_FILTER设置为最后两个时,它可以工作.

现在这是我不理解和好奇的.当我将我正在使用的图像缩小为512x512的纹理时,GL_TEXTURE_MIN_FILTER设置无关紧要.min过滤器的所有四个设置都有效.

所以我的问题是,对纹理使用最小滤镜时是否需要图像的尺寸?比如我需要使用方形图像吗?包装样式或磁过滤器的配置等其他问题可以解决吗?

或者它看起来像是设备的OpenGL实现错误?

android textures opengl-es opengl-es-2.0 galaxy

1
推荐指数
1
解决办法
5497
查看次数

标签 统计

android ×2

bitmap ×1

galaxy ×1

opengl-es ×1

opengl-es-2.0 ×1

pixel ×1

textures ×1