public static int calculateInSampleSize(BitmapFactory.Options options,int reqWIDth,int reqHeight) { // Raw height and wIDth of image final int height = options.outHeight; final int wIDth = options.outWIDth; int inSampleSize = 1; if (height > reqHeight || wIDth > reqWIDth) { final int halfheight = height / 2; final int halfWIDth = wIDth / 2; // Calculate the largest inSampleSize value that is a power of 2 and keeps both // height and wIDth larger than the requested height and wIDth. while ((halfheight / inSampleSize) > reqHeight && (halfWIDth / inSampleSize) > reqWIDth) { inSampleSize *= 2; } } return inSampleSize;}
对我来说没有意义的是这里使用halfheight和halfWIDth.让我们来看一个真实世界的例子,这样我就可以展示我的意思.
我想将用户的照片加载到OpenGL纹理中.我已经查询过发现GL_MAX_TEXTURE_SIZE是4096.用户选择了4320×2432的照片,所以我需要将其缩小一点.
我调用了docs中提供的静态帮助器方法:
options.inSampleSize = BitmapUtils.calculateInSampleSize(options,maxTextureSize,maxTextureSize);
单步执行此代码,halfheight将为1216,halfWIDth将为2160,并且如果该值除以inSampleSize仍然大于请求的维度,则inSampleSize将仅为1以外的值.
当我运行此设置时,inSampleSize设置为1,它根本不会缩小图像,并且OpenGL会因为大于GL_MAX_TEXTURE_SIZE而抛出拟合.
我的问题是为什么我们在这里除以2?我不在乎我的一半图像是否符合要求的尺寸,我希望整个图像都合适.只要(halfheight / inSampleSize)>保持inSampleSize不会更有意义吗? reqHeight和(halfWIDth / inSampleSize)> reqWIDth?
解决方法 这是我对这种方法意图的误解.我以为我们正在寻找一个inSampleSize来解码一个Bitmap以适应所请求的尺寸.我现在看到该方法旨在返回一个值来解码一个尽可能接近但不小于请求大小的Bitmap. 总结以上是内存溢出为你收集整理的android – 为什么文档示例除以2来计算inSampleSize以进行位图加载?全部内容,希望文章能够帮你解决android – 为什么文档示例除以2来计算inSampleSize以进行位图加载?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)