Qt的卡拉OK歌词效果

先上图一张..

驳壳地址:http://blog.csdn.net/robertkun

实现卡拉OK效果, 主要是使用了QPainter的叠加,

		pTmp.setCompositionMode(QPainter::CompositionMode_Source);
		pTmp.fillRect(QRect(0, 0, paintw, rtText.height()), QBrush(Qt::white));
		pTmp.fillRect(QRect(0, 0, mPrecent, rtText.height()), QBrush(Qt::blue));

		pTmp.setCompositionMode(QPainter::CompositionMode_DestinationIn);
		pTmp.drawImage(0, 0, pmMask);
		pTmp.setCompositionMode(QPainter::CompositionMode_DestinationOver);

主要函数:

void testLyrics::DrawLyric(QPainter &p, const QRect& rt)
{
	p.setBrush(Qt::darkGray);
	p.drawRect(rect());

	const QString strLyric = mCurLyrics.lyric;
	QFont m_ftLyric(QString::fromLocal8Bit("微软雅黑"), 24, QFont::Bold);

	QPainter pTmp;

	QFontMetrics fm(m_ftLyric);
	QSize textSize = fm.size(Qt::TextSingleLine, strLyric);
	QRect textRect(QPoint(0,0),textSize);
	int paintw = textSize.width();
	int playedW = textSize.width()*0.5;

	QRect rtText = rect();

	//	pTmp.setRenderHints(QPainter::TextAntialiasing, true);
	QImage pmMask(paintw, rtText.height(),QImage::Format_ARGB32);
	pmMask.fill(Qt::transparent);
	if (pTmp.begin(&pmMask))
	{
		pTmp.setFont(m_ftLyric);
		pTmp.setPen(Qt::black);

		pTmp.drawText(pmMask.rect(), strLyric);
	}
	pTmp.end();

	QImage pmFG(paintw, rtText.height(),QImage::Format_ARGB32);
	if (pTmp.begin(&pmFG))
	{
		pTmp.setCompositionMode(QPainter::CompositionMode_Source);
		pTmp.fillRect(QRect(0, 0, paintw, rtText.height()), QBrush(Qt::white));
		pTmp.fillRect(QRect(0, 0, mPrecent, rtText.height()), QBrush(Qt::blue));

		pTmp.setCompositionMode(QPainter::CompositionMode_DestinationIn);
		pTmp.drawImage(0, 0, pmMask);
		pTmp.setCompositionMode(QPainter::CompositionMode_DestinationOver);

		// shadow
		pTmp.setFont(m_ftLyric);
		pTmp.setPen(QColor(0,0,0,0x80));

		pTmp.drawText(pmMask.rect(), strLyric);
	}
	pTmp.end();

	p.drawImage(rtText.left(), rtText.top(), pmFG);
}

实例下载:

http://download.csdn.net/detail/robertkun/7297947

Qt的卡拉OK歌词效果

时间: 2024-10-10 16:45:32

Qt的卡拉OK歌词效果的相关文章

Qt Quick里的图形效果:阴影(Drop Shadow)

Qt Quick提供了两种阴影效果: DropShow,阴影.这个元素会根据源图像,产生一个彩色的.模糊的新图像,把这个新图像放在源图像后面,给人一种源图像从背景上凸出来的效果. InnerShadow,内阴影.这个元素会根据源图像,产生一个彩色的.模糊的新图像,与 DropShadow不同的是,新图像会放在源图像里面. 效果 下面是我设计的示例效果. 首先是 DropShadow : 图1 阴影效果 然后是内阴影效果: 图2 内阴影效果 源码分析 如图1所示,界面被分为三部分. 最上面的是源图

Qt Quick里的图形效果——渐变(Gradient)

Qt Quick提供了三种渐变图形效果: ConicalGradient,锥形渐变 LinearGradient,线性渐变 RadialGradient,径向渐变 效果 下图是我设计的示例效果: 图 1 渐变图形效果 如图所示,第一行为线性渐变,第二行为锥形渐变,第三行为径向渐变. 渐变元素与其他图形效果元素不同之处在于:渐变元素既可以用来改变一个已有的元素(如Image),也有可以独立使用.如你在示例效果图中看到的那样,每一行前两个是独立使用渐变元素的效果,后两个是讲渐变效果应用到其它元素上的

Qt Quick里的图形效果——颜色(Color)

Qt Quick提供了通过改变一个 Item 的颜色来产生各种各样效果的元素.有下面几种: BrightnessContrast,调整亮度和对比度 ColorOverlay,在源 Item 上覆盖一层颜色 Colorize,设置源 Item 的 HSL 颜色空间 Desaturate,降低颜色的饱和度 GammaAdjust,使用 gamma 曲线来改变源 Item 的照度 HueSaturation,在 HSL 颜色空间改变源 Item 的颜色 LevelAdjust,在 RGBA 颜色空间调

android版音乐播放器----卡拉OK歌词实现(一)

我们都看过酷狗的滚动歌词,当然,我们要实现他的话,第一步,就是弄出类似的歌词效果. 大家可以参考一下,下面我提供的链接的视频,里面提到了,歌词实现的大概原理. http://www.duobei.com/room/trial/5873886122 知道它的实现原理后,我们就可以从歌词入手了.

Delphi以GDI+制作桌面歌词效果

在Windows XP下效果图: 在Windows 7下有焦点时效果图: 在Windows 7下无焦点时效果图: 在Windows 7下右键菜单效果图: 很多音频播放软件都带有桌面歌词效果,在桌面上显示歌词字幕,可以设置是否置顶桌面,是否背景穿透等等.要实现这样的效果方法有很多种,利用GDI+的特性来实现桌面歌词效果,可以达到歌词字幕的平滑柔和.在参考了CodeProject的一篇文章,文章标题<To Create A COOL Desktop Lyrics Demo >链接地址:http:/

qt qml 刮刮卡效果

用canvas+mouseArea实现的刮刮卡效果. 表层是一层色彩,用手指划开,可看到下面的文字Lisence: MIT, 请保留本文档说明Author: surfsky.cnblogs.com 2015-02 [先看效果] [下载] http://download.csdn.net/detail/surfsky/8445011 [核心代码] 1 Canvas { 2 id: canvas 3 anchors.fill: parent 4 5 // 6 property bool isFirs

android版音乐播放器----卡拉OK歌词实现(二)

相信大家都看过酷狗的音乐播放器,特别是酷狗的滚动歌词实现起来,效果特别好.我自己也尝试看了一下酷狗的歌词文件,发现是加密的,根本就看不了,所以只能是从目前开源的歌词文件出发了.我自己选择的是ksc歌词文件. 要实现歌词的功能,那首先就是要先认识一下ksc歌词的文件与普通的lrc歌词有那方面的区别? 当然,这里我从网上找了一个文档,看了文档里面的介绍,大家大概就会明白两都的区别. http://wenku.baidu.com/link?url=Ga4ESBrytlx3qUoxX5ApHbFIZro

酷狗音乐展示滚动歌词效果的控件实现

文章来自http://blog.csdn.net/zhaodecang 在音乐播放器项目中使用到酷狗音乐展示歌词的效果,需要支持修改字体.颜色.渐变色等功能 截图如下(效果不是很好,请下载Demo查看) 歌词绘制流程核心代码如下(具体实现过程请看Github源码) @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); // 中心Y坐标 float centerY = getHeight() / 2 + mTe

【Qt】QOpenGLWidget展示蒙版效果

关键代码是派生QOpenGLWidget,覆写paintEvent函数 QPainter p; p.begin(this); p.drawImage(QPoint(0, 0), m_Img); QLinearGradient grad(0, 0, rect().width(), rect().height()); { QGradientStops gs; gs << QGradientStop(0.0, QColor(0,0,0,100)) << QGradientStop(0.5