QBitmap表示一种只有黑白的单色图片,类似于mfc中的位图。该类主要用于创建自定义的光标和画刷对象,以及创建区域对象和为某个空间设置掩码图片。

QBitmap派生自QPixmap类,它的颜色深读为1。当然,空的QBitmap对象的颜色深度为0。所以,如果我们将一个颜色深度大于1的图片赋值给bitmap,bitmap会自动发生抖动,将图片颜色变为黑白色。

当然,我们也可以单独创建一个QBitmap对象,然后使用Qt::color0和Qt::color1对它进行填充。其中,使用Qt::color0会将QBitmap的所有位置0,Qt::color1则会将QBitmap的所有位置1。而对一个位图来说,0代表背景(或透明像素),1代表前景(或不透明像素)。当然,我们还可以使用该类的成员函数clear()将QBitmap对象的所有位置为Qt::color0。

但要注意的是,使用Qt::black 和 Qt::white是没有意义的,因为QColor::pixel()不一定是用0表示黑色,用1表示白色的。

另外,QBitmap还提供了两个常用的静态方法。fromData()可以用一个uchar数组来构建一个QBitmap对象,所以我们可以先把一个图片使用QFile读到内存中,然后使用该方法构建出一个QBitmap对象;而另一个fromImage()则提供了将一个QImage转换成QBitmap的方法。

下面,我们写一个简单的例子,将一张图片分别以QBitmap和QPixmap的形式绘制到窗口上,来看一下它们的效果和区别。

新建一个GUI程序,将准备好的一张图片作为资源添加到工程中,然后,重写窗口类的paintEvent(QPaintEvent*)方法,进行绘图。

代码如下:

void Widget::paintEvent(QPaintEvent *)
{QPainter painter(this);QBitmap bitmap(":/1.png");QPixmap pixmap(":/1.png");painter.drawPixmap(0, 0, rect().width()/2, rect().height(), bitmap);painter.drawPixmap(rect().width()/2, 0, rect().width()/2, rect().height(), pixmap);
}

我使用同一张图片分别构建了一个QBitmap对象和一个QPixmap对象,然后将它们并排绘制窗口中。

运行结果如下:

可以看到,当我们用一副彩色图片来构建QBitmap对象时,QBitmap会自动发生抖动将图片变为了黑白色。

QBitmap 单色图片相关推荐

  1. 搭建Android+QT+OpenCV环境,实现“单色图片着色”效果

    OpenCV是我们大家非常熟悉的图像处理开源类库:在其新版本将原本在Contrib分库中的DNN模块融合到了主库中,并且更新了相应文档.这样我们就能够非常方便地利用OpenCV实现一些属于DeepLe ...

  2. windows怎么将图片变为单色图片_印刷丨单色黑与四色黑

    在打印店打印大面积黑色时你们是否遇见油墨太多沁湿纸张出现机器卡纸:印出的黑色没达到自己想要的那么黑:细看会看见其它色的叠印:那么你可能就是单色与四黑色没有选择正确. 什么是单色黑? 要理解什么是单色黑 ...

  3. 把图片修改为单色图片

    实现方式很多,可以用jdk原生api,也可以用框架,如jhlabs. 这里只介绍原生api实现. 代码如下 import java.awt.Graphics2D; import java.awt.Im ...

  4. 用opencv简单创建单色图片并保存

    用opencv简单创建图片 主要调用一些API来简单实现,包含部分数组知识(一个opencv图像是.array类型的二维或多维数组) // # numpy是python的一种开源数值计算扩展 impo ...

  5. 9.1 使用QPxmap类加载图片

    第9章 图形绘制与视图框架 Qt提供了四个类用于处理图像数据:QImage.QPixmap.QBitmap.QPicture.一般利用QImage.QPxmap类实现图像的加载显示,使用其类中的方法可 ...

  6. QPixmap,QImage load图片失败问题

    Qt封装了很多关于图片加载的类,主要有QPixmap,QImage,QPicture,QBitmap四种.QImage一般用于数据流IO操作,运用此类可以直接获取像素详细信息:QPixmap:一般用于 ...

  7. 将图片处理成圆形_设计基本功!图片处理技巧

    图片是平面设计中说服力很强的元素之一,它的真实性.直观的效果能够让观众产生浓厚的兴趣.一幅精致的图片,无论是形式还是内容都要具有一定的视觉冲击力和视觉感染力,才能够吸引观众的注意力. 适当修剪图片裁剪 ...

  8. 编写一个图片去水印的小工具

    原理分析 为了便于分析原理,我写了一个简单的Demo,如下图所示,在Demo页面中有三张单色图片,第一张原始图是颜色为#999的灰色图片,第二张水印图是颜色为#fff透明度为0.7的图片,第三张结果图 ...

  9. Altium Designer 在PCB中添加 图片 Logo 或者丝印

    开始 在Altium Designer 19中已经自带了图片转换成layout的方式,使用方法非常简单 图片需要事先转换为单色图片 举个例子 在丝印层添加一个二维码图片 效果图 第一步 首先下载或制作 ...

  10. 如何使用OLED显示图片

    以下文章来源于:公_众_号开源电子网 读取更多技术文章,请扫码关注 如何使用OLED显示图片 前言 这篇文章不过多描述OLED工作原理及驱动过程,仅从实用性出发,如何使用OLED显示图片.这里我们以正 ...

最新文章

  1. iOS关于自定义rightBarButtonItem
  2. 美国雷神公司对第六代战斗机的任务系统提出六点预测
  3. Android Studio ndk-Jni开发详细
  4. Redis 单机模式,主从模式,哨兵模式(sentinel),集群模式(cluster),第三方模式优缺点分析
  5. Enable trace in Resale Order application
  6. java io流操作_【Java基础】IO流操作
  7. MacOS12+SublimeText+Skim无法正常跳转Skim的问题与解决
  8. 阿里云windows server 2012安装.net framework3.5失败解决方案
  9. CodeForces round 753 problem B Odd Grasshopper(奇怪的蚱蜢)
  10. 3d ListView翻译
  11. Freebsd-9.0 how to change default sound device
  12. 2020杭电多校赛 Multi-University Training Contest
  13. Settings sync 配置与使用
  14. 娱乐大数据:《小时代》是属于谁的小时代?
  15. 打造零售数据中台 数澜助百果园数字化转型
  16. 商鞅(约公元前395年-公元前338年)
  17. 以下是一段歌词,请从这段歌词中统计出朋友出现的次数
  18. 威廉.布莱克 和 他的诗歌
  19. 一文速览全球央行数字货币最新进展
  20. 用uniapp搞了个小说阅读器

热门文章

  1. 网页中有大量图片加载很慢,用什么方法进行优化
  2. hadoop--环境搭建--域名解析失败
  3. 写给程序员的 2018 新年计划清单
  4. MFC仿360屏幕截图
  5. 极简主义、人工智能与Readhub的产品哲学
  6. css入门1 css简介
  7. oracle18c shard技术分享-安装部署
  8. 【第109期】那碗“我拒绝”的毒鸡汤,坑了多少游戏策划?
  9. 王者荣耀交流协会final发布第四次scrum例会
  10. 虚幻引擎图文笔记:The emitter is GPU but the fixed bounds checkbox is not set警告的解决