android纹理图片的加载与修改

环境: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();}

偶尔,我一个人站在黄昏的荒野,

android纹理图片的加载与修改

相关文章:

你感兴趣的文章:

标签云: