博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
opengl 直接draw bitmap 文件 in android
阅读量:2089 次
发布时间:2019-04-29

本文共 1236 字,大约阅读时间需要 4 分钟。

最近研究 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数据的显示,目前还没头绪。有知道的同学给点提示。

转载地址:http://iemqf.baihongyu.com/

你可能感兴趣的文章
java-oracle中几十个实用的PL/SQL
查看>>
PLSQL常用方法汇总
查看>>
几个基本的 Sql Plus 命令 和 例子
查看>>
PLSQL单行函数和组函数详解
查看>>
Oracle PL/SQL语言初级教程之异常处理
查看>>
Oracle PL/SQL语言初级教程之游标
查看>>
Oracle PL/SQL语言初级教程之操作和控制语言
查看>>
Oracle PL/SQL语言初级教程之过程和函数
查看>>
Oracle PL/SQL语言初级教程之表和视图
查看>>
Oracle PL/SQL语言初级教程之完整性约束
查看>>
PL/SQL学习笔记
查看>>
如何分析SQL语句
查看>>
结构化查询语言(SQL)原理
查看>>
SQL教程之嵌套SELECT语句
查看>>
几个简单的SQL例子
查看>>
日本語の記号の読み方
查看>>
计算机英语编程中一些单词
查看>>
JavaScript 经典例子
查看>>
判断数据的JS代码
查看>>
js按键事件说明
查看>>