android纹理图片的加载与修改
16lz
2021-01-23
环境:eclipse,android,opengl es
最近需要对纹理图像进行一些修改,首先需要加载纹理图片,并对纹理图片进行一些修改,最后再进行纹理对象的生成。
一、纹理图片的加载
纹理图片的加载可以通过getResources().openRawResource(int)函数和bitmapFactory类进行加载。
InputStream is = mContext.getResources().openRawResource( R.drawable.map_lr_new_n); Bitmap sbitmap = null; try { sbitmap = BitmapFactory.decodeStream(is); // dst = revertBitmapColor(bitmap); } finally { try { is.close(); } catch (IOException e) { // Ignore. } } @SuppressWarnings("deprecation") Drawable drawable = new BitmapDrawable(sbitmap); Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
二、纹理图片的修改 1、copy bitmap对象
从文件加入的图片不能修改,所以需要先将图像copy到另外一个bitmap对象。
Bitmap bitmap2=bitmap.copy(bitmap.getConfig(), true); ModifyBitmap(bitmap2);
2、修改bitmap对象
通过bitmap中的setPixel函数进行bitmap对象的修改,其中还涉及到int类型的rgb赋值。
public void ModifyBitmap(Bitmap bitmap) { int nw=bitmap.getWidth(); int nh=bitmap.getHeight(); //int alpha= int col1=0; int col2=0; for(int i=0;i>16; int g=(p& 0x0000FF00)>>8; int b= p& 0x000000FF; int a=255-k*50; p=(a<<24)|(r<<16)|(g<<8)|(b); int tempA=p; bitmap.setPixel(j+1-k, i,tempA) ; } } } }
三、纹理的绑定
使用opengl es中的函数对纹理进行绑定。
if (bitmap != null) { glBindTexture(GLES11.GL_TEXTURE_2D, drawTestTxId[0]); glTexParameteri(GLES11.GL_TEXTURE_2D, GLES11.GL_TEXTURE_MAG_FILTER, GLES11.GL_LINEAR); glTexParameteri(GLES11.GL_TEXTURE_2D, GLES11.GL_TEXTURE_MIN_FILTER, GLES11.GL_LINEAR); glTexParameteri(GLES11.GL_TEXTURE_2D, GLES11.GL_TEXTURE_WRAP_S, GLES11.GL_REPEAT); glTexParameteri(GLES11.GL_TEXTURE_2D, GLES11.GL_TEXTURE_WRAP_T, GLES11.GL_REPEAT); GLUtils.texImage2D(GLES10.GL_TEXTURE_2D, 0, (bitmap 0); bitmap.recycle(); }
更多相关文章
- Android SharedPreferences 存储复杂对象
- React Native嵌入到Android原生应用中、组件的生命周期、颜色、
- 三层缓存机制-新知识点,Android常见的内存缓存算法(LruCache原理
- Android使用Parcelable传递对象方法及注意事项
- Android Handler 异步消息处理机制的妙用 创建强大的图片加载类
- [记录点滴]在Ionic和Android中上传Blob图片
- android 实现保存图片到相册
- android图片裁剪
- Android 中保存图片的代码