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