我正在尝试在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()是不是为了我的目的而设计的(获取位图子区域的一大块像素信息)?还是我错误地使用它?有没有其他方法可以做到这一点,也许使用不同的类?
如果有人对此有所说,我将不胜感激.谢谢.
我找到了一个名为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实现错误?