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

3 篇文章 0 订阅

之前看到有使用第三方库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.csdn.net/detail/lxnkobe/5025136

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值