Ⅰ Qt 之 QBitmap
QBitmap 类提供单色(monochrome,1位深度)像素图。
QBitmap类是单色的 off-screen 绘画设备,主要用于创建自定义 QCursor 和 QBrush 对象,构造 QRegion 对象以及为像素图(pixmaps)和小部件(widgets)设置蒙版。
QBitmap 是确保深度为 1 的 QPixmap 子类,深度为 0 的空对象除外。如果将深度大于 1 的像素图分配给位图,则位图将自动抖动。
在 QBitmap 对象(或深度为 1 的 QPixmap 对象)上绘制时,请使用 QColor 对象 color0 和 color1 。使用 color0 进行绘制会将位图位设置为 0,使用 color1 进行绘制会将位图位设置为 1。对于位图,0 位表示背景(或透明像素),而 1 位表示前景(或不透明像素)。使用 clear() 函数将所有位设置为 color0 。请注意,使用黑色和白色是没有意义的,因为 QColor::pixel() 值对于黑色不一定为 0,对于白色不一定为 1。
QBitmap 类提供了 transformd() 函数,该函数返回位图的转换后的副本;使用 QTransform 参数平移,缩放,剪切和旋转位图。另外, QBitmap 提供了静态的 fromData() 函数,该函数返回从给定的 uchar 数据构造的位图,以及静态的 fromImage() 函数,返回转换后的 QImage 对象的副本。
就像 QPixmap 类一样, QBitmap 通过使用隐式数据共享进行了优化。有关更多信息,请参见 Implicit Data Sharing 文档。
Ⅱ QT 三大绘图类:QPixmap/QImage/QPicture
QPixmap 、 QImage 、 QPicture 都是 QPaintDevice 的子类。
QPixmap 的设计本来就是用来加速显示,用 paint 绘图时用 QPixmap 会比其他类的效果好很多。一般小图片用 QPixmap 。
QPixmap 也可以接受一个字符串作为一个文件的路径来显示这个文件,比如你想在程序之中打开 BMP、GIF、JPG、JPEG、PNG 等文件,就可以使用 QPixmap 。使用 QPainter 的 drawPixmap() 函数可以把这个文件绘制到一个 QLabel 、 QPushButton 或者其他的设备上面。 QPixmap 是针对屏幕进行特殊优化的,因此,它与实际的底层显示设备息息相关。注意,这里说的显示设备并不是硬件,而是操作系统提供的原生的绘图引擎。所以,在不同的操作系统平台下, QPixmap 的显示可能会有所差别。 QPixmap 提供了静态的 grabWidget() 和 grabWindow() 函数,用于将自身图像绘制到目标上。同时,在使用 QPixmap 时,你可以直接使用传值也不需要传指针,因为 QPixmap 提供了“隐式数据共享”,即传递 QPixmap 不必须使用指针。
更多参考: QPixmap
QBitmap 继承自 QPixmap ,因此具有 QPixmap 的所有特性。 QBitmap 的色深始终为 1. 色深这个概念来自计算机图形学,是指用于表现颜色的二进制的位数。我们知道,计算机里面的数据都是使用二进制表示的。为了表示一种颜色,我们也会使用二进制。比如我们要表示8种颜色,需要用 3 个二进制位,这时我们就说色深是 3. 因此,所谓色深为 1,也就是使用 1 个二进制位表示颜色。1 个位只有两种状态:0 和 1,因此它所表示的颜色就有两种,黑和白。所以说, QBitmap 实际上是只有黑白两色的图像数据。由于 QBitmap 色深小,因此只占用很少的存储空间,所以适合制作游标( QCursor )或者笔刷( QBrush )。
既然依赖软件,那么就不需要用硬件 GUI 的线程了,可以开个软件的线程,可提高用户 UI 体验。
例子:
QImage 使用 Qt 自身的绘图引擎,可提供在不同平台上相同的图像呈现效果,并可通过 pixel() 、 setPixpel() 等方法直接存取和修改指定的像素。
QPicture 是一个绘画设备类,它记录了并可以重演 QPainter 的命令。你可以使用 QPainter 的 begin() 方法,指定在 QPicture 上绘图,使用 end() 方法结束绘图,使用 QPicture 的 save() 方法将 QPainter 所使用过的绘图指令存至档案。要重播绘图指令的话,建立一个 QPicture ,使用 load() 方法载入绘图指令的档案,然后在指定的绘图装置上绘制 QPicture 。
记录绘制的图形:
接着便可在您的绘图设备重画已经保存的图形:
更多参考: QPicture¶
QPixmap 跟硬件是相关的,如 X11, Mac 以及 Symbian 平台上, QPixmap 是存储在服务器端,而 QImage 则是存储在客户端,在 Windows 平台上, QPixmap 和 QImage 都是存储在客户端,并不使用任何的GDI资源。
在 X11, Mac 以及 Symbian 平台上,因为 QImage 是存储在客户端,往 QImage 上绘图比较快,但显示它则比较慢。因为 QPixmap 是存储在服务器端,往 QPixmap 上绘图比较慢,但显示它则比较快。但在 Windows 平台上则是是一样的,因为它们都存储在客户端。
QImage 是设计并优化来为 I/O操作的,可以直接访问和操作像素,而 QPixmap 是设计并优化来在屏幕上显示图片的。 QBitmap 仅是继承自 QPixmap 的一个方便使用的类,是为了确保图片的深度为1。 QPicture 是绘图设备,可以用来重现 QPainter 命令。
Ⅲ 用qt代码怎样编写图片保存格式
qt提供了多个保存图片的接口,比较常用的接口如下
bool QPixmap::save ( const QString & fileName, const char * format = 0, int quality = -1 ) const
参数说明:
fileName 文件的路径
可选参数:format 图片的格式(qt目前支持的格式见下表),如果未设置该值
则根据文件路径的后缀名来判断图片的存储格式。
可选参数:quality 图片的质量(可设置成0-100之内的值,数值越大说明保存的质量越好),如果未设置该值,则按照默认的设置来保存图片。
表一:qt 4.6.3支持的文件格式
格式 描述
BMP Windows Bitmap
JPG Joint Photographic Experts Group
JPEG Joint Photographic Experts Group
PNG Portable Network Graphics
PPM Portable Pixmap
TIFF Tagged Image File Format
XBM X11 Bitmap
XPM X11 Pixmap
bool QImage::save ( const QString & fileName, const char * format = 0, int quality = -1 ) const
参数说明同上;
这里举个使用QPixmap保存图片的例子:
QPixmap pixmap;
if(pixmap.load("D:\\images\\source.png"))
{
if(pixmap.save("distance.jpg"))
{
//save image successful
}else
{
//save image failure;
}
}else
{
//load image failure
}
注:如果需要对图片的保存参数进行更多的设置,可以使用QImageWriter提供的接口来实现
Ⅳ QPixmap,QImage,QBitmap和QPicture的区别
Qt上图片处理使用QPixmap和QImage时最多了,不过既然谈到图片了,我们把其他几个图片处理类也说一下:QBitmap只是一个继承于QPixmap的简单类,它可以确保图片深度为1。QBitmap是QPixmap的子类,提供单色图像,可以用来制作游标(QCursor)或者笔刷(QBrush)。
Ⅳ Qt加载不了图片
清理缓存,无效的话 卸载 重新安装
Ⅵ 初学QT QPixmap:It is not safe to use Pixmaps outside the GUI thread 报错如上 如何解决 拜托高手指教
Qt只允许主线程使用界面类,因为界面类不是线程安全的,不可重入,在多个线程中使用可能会出现问题,因此Qt不建议主界面线程外的线程使用图形类和调用图形类接口。建议你修改最初的设计,让界面与控制分离,主线程主要做界面显示,次线程使用signal-slot控制主线程中的界面类,从而间接达到控制目的,connect时指定slot在主线程中运行
Ⅶ 怎么的QPixmap无法加载资源文件
第一:资源文件一个.qrc 文件的例子:images/.png images/cut.png images/new.png images/open.png images/paste.png images/save.png.qrc 文件中列出的资源文件是程序的源码树的一部分。指定的路径是 .qrc 文件所在目录的相对路径。注意,列出的资源文件必须位于 .qrc 文件所在目录或者其子目录下。资源数据也能被编译进二进制文件中,因此应用程序代码可以立即访问;也可以创建一个二进制资源,稍后在程序中登记了资源体系的代码中指定。缺省时,程序可以用资源在源码树中的名称加一个 :/ 前缀来访问它。例如,在程序的源码树中是 images/cut.png 的文件可以通过 :/images/cut.png 来访问。但也可以用 file 标签中的 alias 属性来指定:images/cut.png这时该文件可以通过 :/cut-img.png 来访问。也可以在 .qrc 文件中用 qresource 标签的 prefix 属性:它可以为 .qrc 文件中所有文件指定一个前缀: images/cut.png这时该文件可以用 :/myresources/cut-img.png 访问。第二:运用QLABEL 显示图片把你的label.png放到工程目录顶层,直接QPixmap pixmap(":/label");//此处;label是图片别名,注意是否有前缀ui->title_label->setPixmap(pixmap);ui->title_label->show();Ⅷ 100分求助QT编程高手,关于QGraphicsView内存泄露的问题。
楼上说的对 你这种创建对象的方式属于在栈上创建 栈上的东西当函数结束 或跳出当前的中括号后就自动释放 我觉得重复这段代码没有问题 主要是程序逻辑的实现 要把这段代码放在一个槽函数里不会有问题的
Ⅸ Qt中使用QPixmap时,怎样使得添加默认路径或者其他路径的图片啊,是不是所有的图片都支持还是有什么区别
QString myDirPath = QString::fromLocal8Bit("C:\\documents and settings\\xxxx\\桌面");
QDir myDir = QDir(myDirPath);
myDirPath = myDir.exists() ? myDirPath:QDir::homePath();
m_fileName = QFileDialog::getOpenFileName(this, tr("Select Image:"),
myDirPath,
tr("Images (*.jpg *.png *.tif *.ico *.bmp *.gif)"));
QT支持jpg, png, tif, ico, bmp, gif等等大多数的图片格式,其中部分是以插件的形式支持。
希望对你有所帮助