环境: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<nh;i++) { for(int j=0;j<nw-1;j++) { int p=bitmap.getPixel(j+1, i); int r=(p& 0x00FF0000)>>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(); }
时间: 2024-11-08 20:25:48