opengl 直接draw bitmap 文件 in android

最近研究 opengl 直接显示纹理的窍门,目前实现了显示24位bitmap的方法。

代码如下:

#define MYW 512
#define MYH  480

     GLint crop[4] = { 0, MYH, MYW, -MYH };
    
     glBindTexture(GL_TEXTURE_2D, 0);
     glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, crop);
     glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
     glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
     glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
     glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
     glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
     glEnable(GL_TEXTURE_2D);
     glColor4f(1,1,1,1);

 uint32_t t32my[MYW*MYH] ;
  FILE* fp = fopen("/sdcard/texrgb24.bmp","rb");
  if( fp ){
     unsigned char tmpb[3*MYW] ;
     for( int ii = 0 ; ii < MYH ; ii ++ ){
        fseek( fp , 54+ (MYH-ii-1)*3*MYW ,  SEEK_SET ) ;
        fread( tmpb , 1 ,3*MYW ,fp ) ;
        for( int jj = 0 ; jj < MYW ; jj++ ) 
          t32my[ii*MYW+ jj] = (0xff000000|(tmpb[jj*3+0]<<16)|(tmpb[jj*3+1]<<8)|tmpb[jj*3+2]) ;   
     }
     fclose( fp ) ;
  } 


     glClear(GL_COLOR_BUFFER_BIT);
 
     glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, MYW, MYH, 0, GL_RGBA, GL_UNSIGNED_BYTE ,  t32my);
     glDrawTexiOES(0, 0, 0, dim, 400);

完整源码可以参照这里:ttps://sourceforge.net/p/gldrawtexturesv

下面要研究怎么把yuv 图像作为纹理直接显示。这样就可以直接使用 GPU 硬件来加速 yuv数据的显示,目前还没头绪。有知道的同学给点提示。

发布了108 篇原创文章 · 获赞 28 · 访问量 31万+
展开阅读全文

android openGL ES2.0 显示bitmap时如果想要动态更换bitmap怎样实现?

12-05

之前尝试同一个texture ID先后绑定不同bitmap的方法 失败了,显示在屏幕上的还是原来的bitmap。 我想问一下想要更换一个bitmap是否要重新调用以下方法重新生成一个texture?还是有更好的方法? 1. glGenTexture 2. glBindTexture 3.texImage2D 求大神赐教!!! ---------------------------------------------- 以下是我用来更换texture所显示bitmap的函数(函数不能用) void refreshBitmap(){ index=(index+1)%10+1; BitmapFactory.Options options = new BitmapFactory.Options(); Bitmap bitmap; switch(index){ case 1:{ bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.frame1, options); break; } case 2:{ bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.frame2, options); break; } case 3:{ bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.frame3, options); break; } case 4:{ bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.frame4, options); break; } case 5:{ bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.frame5, options); break; } case 6:{ bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.frame6, options); break; } case 7:{ bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.frame7, options); break; } case 8:{ bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.frame8, options); break; } case 9:{ bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.frame9, options); break; } case 10:{ bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.frame10, options); break; } default: { bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.frame1, options); break; } } System.out.println("shit!!"+texture); glBindTexture(GL_TEXTURE_2D, texture); //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); //放大缩小使用的函数 //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); texImage2D(GL_TEXTURE_2D, 0, bitmap, 0); glGenerateMipmap(GL_TEXTURE_2D); //glBindTexture(GL_TEXTURE_2D, 0); bitmap.recycle(); mySurfaceView.requestRender(); } ``` ``` 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览