不使用libpng,较好解决OpenGL中使用png图标的方法

来源:互联网 发布:网络对小学生的利与弊 编辑:程序博客网 时间:2024/06/07 12:50

之前看到有使用第三方库libpng 解决openGL中使用png图标的文章。今天实现了使用QT+OpengL 实现了png图标的使用,没有使用libpng。

下面是代码,仅供参考:

void QglModel::LoadIcons(char * file,GLuint &texture_ID) {QImage t;QImage b;glEnable(GL_TEXTURE_2D);glAlphaFunc(GL_GREATER, 0.1f);  //enables your application to set the alpha test function.glEnable(GL_ALPHA_TEST);b.load(file, "PNG");QImage fixedImage( b.width(), b.height(), QImage::Format_ARGB32);QPainter painter(&fixedImage);painter.setCompositionMode(QPainter::CompositionMode_Source);painter.fillRect(fixedImage.rect(), Qt::transparent);  //use transparent fill image rectpainter.setCompositionMode(QPainter::CompositionMode_SourceOver);painter.drawImage( 0, 0, b);painter.end();t = QGLWidget::convertToGLFormat( fixedImage );glGenTextures(1, &texture_ID );   //name  TexturesglBindTexture( GL_TEXTURE_2D, texture_ID ); //create Textures//zoomicon_size.setHeight( t.height() );//zoomicon_size.setWidth( t.width() );glTexImage2D( GL_TEXTURE_2D, 0, 4, t.width(), t.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, t.bits());//glTexImage2D( GL_TEXTURE_2D, 0, 4, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, t.bits());glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );glDisable(GL_ALPHA_TEST);glDisable(GL_TEXTURE_2D);  }
void QglModel::DrawIcons(int x,int y,int pixwidth,GLuint &texture_ID){/*if (!zoomicon_loaded){  LoadIcons(file);  zoomicon_loaded = true;}*///glViewport(x, y, zoomicon_size.width(), zoomicon_size.height());//glMatrixMode(GL_PROJECTION);//glLoadIdentity();glMatrixMode(GL_MODELVIEW);glBindTexture(GL_TEXTURE_2D, texture_ID);glEnable(GL_TEXTURE_2D);glBegin(GL_QUADS);glTexCoord2f(0.0f, 0.0f);glVertex2f(-pixwidth+x, -pixwidth+y);glTexCoord2f(1.0f, 0.0f);glVertex2f(pixwidth+x, -pixwidth+y);glTexCoord2f(1.0f, 1.0f);glVertex2f(pixwidth+x,pixwidth+y);glTexCoord2f(0.0f, 1.0f);glVertex2f(-pixwidth+x,pixwidth+y);glEnd();glDisable(GL_TEXTURE_2D);    }

   工程文件代码:

    http://download.csdn.net/detail/lxnkobe/5025136

原创粉丝点击