• 8043阅读
  • 1回复

使用alpha通道绘制半透明图片…… [复制链接]

上一主题 下一主题
离线ninsun
 

只看楼主 倒序阅读 楼主  发表于: 2011-03-25
好吧……其实这个方法并不是什么新东西,简直是老到家的了……
不过因为需要绘制可以在任意背景上半透明的图片,我搜索过,然而却没有任何结果……于是最终研究出了Qt的帮助文档中都已经注明了的十分“昂贵”的半透明方法……
于是实现代码
  1. // 继承QGraphicsPixmapItem, 并重载了其中的paint函数。
  2. void GraphicsAlphaPixmapItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
  3. {
  4.   if (m_iAlpha >= 0 && m_iAlpha < 255)
  5.   {
  6.     QPixmap _temp(pixmap());  // 生成一个临时图片
  7.     QPixmap _alpha(_temp.size());  // 生成图片对应的空的alpha通道
  8.     _alpha.fill(QColor(m_iAlpha, m_iAlpha, m_iAlpha));  // 设定alpha值(0为完全透明, 255为完全不透明)
  9.     _temp.setAlphaChannel(_alpha);  // 设置alpha通道
  10.     painter->drawPixmap(_temp.rect(), _temp);  // 绘制……
  11.   }
  12.   else
  13.   {
  14.     painter->drawPixmap(pixmap().rect(), pixmap());  // alpha值错误或者为255时直接绘制原图
  15.   }
  16. }


然后,占地求如何为QGraphicsTextItem内的文字加上描边效果(例如为了可以在有着黑色区域的图片上方显示黑色的文字之类的……或者有什么替代方案也可……)
离线roywillow

只看该作者 1楼 发表于: 2011-03-27
绘制含有alpha通道的图片似乎不是很难吧
如果需要一层一层图片叠加的话大概需要painter的QPainter::CompositionMode_SourceOver,不过这个已经是默认值了
另外是不是用QPixmap而不是QImage的原因呢?
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
快速回复
限100 字节
 
上一个 下一个