不施用libpng,较好解决OpenGL中使用png图标的方法
不使用libpng,较好解决OpenGL中使用png图标的方法
工程文件代码:
之前看到有使用第三方库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 rect painter.setCompositionMode(QPainter::CompositionMode_SourceOver); painter.drawImage( 0, 0, b); painter.end(); t = QGLWidget::convertToGLFormat( fixedImage ); glGenTextures(1, &texture_ID ); //name Textures glBindTexture( 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.****.net/detail/lxnkobe/5025136