QT QImage - 将图像的一部分复制为多边形

2023-12-02

尝试将图像的一部分复制为多边形(特别是五边形),但我更感兴趣的是如何复制为除矩形之外的任何内容。

以下代码仅允许复制为矩形。

QImage copy(const QRect &rect = QRect()) const;
    inline QImage copy(int x, int y, int w, int h) const
        { return copy(QRect(x, y, w, h)); }
void SelectionInstrument::copyImage(ImageArea &imageArea)
{
    if (mIsSelectionExists)
    {
        imageArea.setImage(mImageCopy);
        QClipboard *globalClipboard = QApplication::clipboard();
        QImage copyImage;
        if(mIsImageSelected)
        {
            copyImage = mSelectedImage;
        }
        else
        {
            copyImage = imageArea.getImage()->copy(mTopLeftPoint.x(), mTopLeftPoint.y(), mWidth, mHeight);
        }
        globalClipboard->setImage(copyImage, QClipboard::Clipboard);
    }
}

如果要获得非矩形区域,一般方法是使用 QPainter 的 setClipPath() 和 QPainterPath:

#include <QtWidgets>

static QImage copyImage(const QImage & input, const QPainterPath & path){
    if(!input.isNull() && !path.isEmpty()){
        QRect r = path.boundingRect().toRect().intersected(input.rect());
        QImage tmp(input.size(), QImage::Format_ARGB32);
        tmp.fill(Qt::transparent);
        QPainter painter(&tmp);
        painter.setClipPath(path);
        painter.drawImage(QPoint{}, input, input.rect());
        painter.end();
        return tmp.copy(r);
    }
    return QImage();
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QImage image(QSize(256, 256), QImage::Format_ARGB32);
    image.fill(QColor("salmon"));
    QPainterPath path;
    QPolygon poly;
    poly << QPoint(128, 28)
         << QPoint(33, 97)
         << QPoint(69, 209)
         << QPoint(187, 209)
         << QPoint(223, 97);
    path.addPolygon(poly);

    QLabel *original_label = new QLabel;
    original_label->setPixmap(QPixmap::fromImage(image));
    QLabel *copy_label = new QLabel;
    copy_label->setPixmap(QPixmap::fromImage(copyImage(image, path)));

    QWidget w;
    QHBoxLayout *lay = new QHBoxLayout(&w);
    lay->addWidget(original_label);
    lay->addWidget(copy_label);
    w.show();

    return a.exec();
}

enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT QImage - 将图像的一部分复制为多边形 的相关文章

  • 我如何理解这个 C 类型声明?

    double bar int double double double double 在查看讲座幻灯片时 我发现了留给学生的练习 用简单的英语来说 什么是类型bar在这个 C 声明中 Please帮助我解决这个问题 我什至不知道从哪里开始
  • 平滑滚动.net 表单

    您好 我正在 net 中使用表单 并且在运行时动态添加大量链接标签 我将这些链接标签添加到面板并将该面板添加到 winform 当链接标签的数量增加时 表单会显示一个自动滚动条 垂直 现在 当我使用自动滚动向下滚动时 表单在滚动时不会更新其
  • 在 Xamarin 中隐藏软键盘

    如何隐藏软键盘以便在聚焦时显示Entry在 Xamarin forms 便携式表单项目中 我假设我们必须为此编写特定于平台的渲染器 但以下内容不起作用 我创建自己的条目子类 public class MyExtendedEntry Entr
  • VS 程序在调试模式下崩溃,但在发布模式下不崩溃?

    我正在 VS 2012 中运行以下程序来尝试 Thrust 函数查找 include cuda runtime h include device launch parameters h include
  • 读取 C# 中的默认应用程序设置

    我的自定义网格控件有许多应用程序设置 在用户范围内 其中大部分是颜色设置 我有一个表单 用户可以在其中自定义这些颜色 并且我想添加一个用于恢复默认颜色设置的按钮 如何读取默认设置 例如 我有一个名为的用户设置CellBackgroundCo
  • 类特定的新删除运算符是否必须声明为静态

    标准中是否要求类特定的 new new delete 和 delete 是静态的 我可以让它们成为非静态成员运算符吗 为什么需要它们是静态的 它们被隐式声明为静态 即使您没有键入 static
  • ASP.Net Core 内容配置附件/内联

    我正在从 WebAPI 控制器返回一个文件 Content Disposition 标头值自动设置为 附件 例如 处置 附件 文件名 30956 pdf 文件名 UTF 8 30956 pdf 当它设置为附件时 浏览器将要求保存文件而不是打
  • 时间:2019-03-17 标签:c#ThreadSafeDeepCopy

    我一直在阅读很多其他问题以及大量谷歌搜索 但我一直无法找到明确的解决方案 根据我读过的一些最佳实践 类的静态方法应该创建线程安全的 并且实例成员应该将线程安全留给消费者 我想为该类实现深度复制方法 该类本身还有其他引用类型成员 有没有什么方
  • 动态生成的控件 ID 返回为 NULL

    我可以在 Page PreInit 函数中创建动态控件 如何检索控件及其 ID 我的 C 代码用于创建动态控件之一 var btn new WebForms Button btn Text btn ID Addmore btn Click
  • Visual Studio Code:如何配置 includePath 以获得更好的 IntelliSense 结果

    我是使用 Visual Studio Code 的完全初学者 我不知道我在做什么 我已经四处搜索 也许还不够 但我找不到像我这样的人如何配置的简单解释c cpp properties json每当我单击带有绿色波浪线下划线的行旁边的黄色灯泡
  • C++ php 和静态库

    我创建了一个library a 其中包含 cpp 和 h 文件 其中包含很多类 嵌套类和方法 我想在 php 示例中包含这个静态库并尝试使用它 我想提一下 我是 php 新手 我已经在 test cpp 文件中测试了我的 libray a
  • 每个租户的唯一用户名和电子邮件

    我正在使用以下代码编写多租户应用程序ASP NET Core 2 1 我想覆盖默认的与用户创建相关的验证机制 目前我无法创建多个具有相同的用户UserName My ApplicationUser模型有一个名为TenantID 我想要实现的
  • IEnumerable.Except 不起作用,那么我该怎么办?

    我有一个 linq to sql 数据库 非常简单 我们有 3 个表 项目和用户 有一个名为 User Projects 的连接表将它们连接在一起 我已经有了一个获得的工作方法IEnumberable
  • 使用taskkill停止Windows服务

    我需要帮助来使用 C 终止 Windows 服务 现在要终止该服务 请使用以下选项 从命令 sc queryex ServiceName 发现后PID服务的 taskkill pid 1234 exemple f 为了便于阅读 但如果您明白
  • 每个数据库多个/单个 *.edmx 文件

    我有一个通过 ADO net 数据服务与数据库交互的项目 数据库很大 近 150 个具有依赖关系的表 该项目几年前开始 当时使用的是数据集 现在我们正在转向实体模型关系 由于我们添加了更多需要使用的表 该模型正在不断增长 这是管理这一切的正
  • 您是否将信息添加到每个 .hpp/.cpp 文件的顶部? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 创建新的 C 头文件 源文件时 您会在顶部添加哪些信息 例如 您是否添加日期 您的姓名 文件描述等 您是否使用结构化格式来存储此信息 e g F
  • C++ Streambuf 方法可以抛出异常吗?

    我正在尝试找到一种方法来获取读取或写入流的字符数 即使存在错误并且读 写结束时间较短 该方法也是可靠的 我正在做这样的事情 return stream rdbuf gt sputn buffer buffer size 但如果streamb
  • 使用 QtWebEngine 将 C++ 对象暴露给 Qt 中的 Javascript

    使用 QtWebkit 可以通过以下方式将 C 对象公开给 JavascriptQWebFrame addToJavaScriptWindowObject如中所述https stackoverflow com a 20685002 5959
  • Qt 布局,在小部件大小更改后调整到最小大小

    基本上我有一个QGridLayout里面有一些小部件 最重要的是 2 个标签 我用它们将图像绘制到屏幕上 好吧 如果用户愿意 他可以更改传入图像的分辨率 从而强制标签调整大小 我们假设标签的初始大小是320x240 用户将 VideoMod
  • 从 JavaScript 中的 OnClientClick 事件中阻止 C# 中的 asp:Button OnClick 事件?

    我有一个asp Button在我的网页上 它调用 JavaScript 函数和代码隐藏方法 后者进行调用以导航到另一个页面 在 JavaScript 函数中 我正在检查条件 如果不满足这个条件 我想中止导航 以便OnClick方法未被调用

随机推荐

  • 多次显示绘图窗口

    import matplotlib import pylab x 1 2 3 4 5 6 7 8 9 10 y 2 4 6 8 10 12 14 16 18 20 plotting pylab plot x y pylab show plo
  • 玩2.0创建变量并赋值

    我为这个问题搜索了很多 我只想在 scala html 模板中创建一个变量 并且需要一个临时变量 我找到的唯一 有意义 的解决方案如下 defining hello text testvariable gt h1 output of var
  • 如何在打印时隐藏打印按钮?

    我想在单击按钮时打印页面而不打开新选项卡 我有以下几行代码可以为我完成这项工作 function PrintDiv var contents document getElementById wrapper innerHTML var fra
  • 创建新活动时出错

    我正在尝试创建一个新的活动 但出现以下错误 图像底部 InvalidReferenceException 执行 FreeMarker 模板时出错 如果我通过创建扩展 Activity 类的 Java 类来手动创建 Activity 那么它就
  • 从 Pandas DataFrame 创建复杂的嵌套字典

    我试图找到一种从平面 Pandas DataFrame 实例创建 可能是深层 嵌套字典的通用方法 假设我有以下数据框 dat pd DataFrame name John John John John Henry Henry age 24
  • 通过 AVAssetReader 读取音频样本

    如何通过 AVAssetReader 读取音频样本 我找到了使用 AVAssetReader 复制或混合的示例 但这些循环始终由 AVAssetWriter 循环控制 是否可以只创建一个 AVAssetReader 并读取它 获取每个样本并
  • 如何设置邮件服务器?

    我希望任何发送电子邮件至 电子邮件受保护 并且服务器可以获取邮件 因此我可以使用一些服务器端脚本语言 例如 Ruby 来解析电子邮件的内容 Ruby 解决方案会很棒 如果您从未设置过 smtp 服务器 并且不愿意深入研究和学习很多内容 那么
  • 在表单上的标签或文本框中显示字段的描述

    我想要做的是在表单上的标签中显示当前所选字段的描述 我觉得它当前显示的位置 左下状态栏 几乎不明显 如何访问状态栏中的该值 例如 在我的表单上 当我选择 员工姓名 字段时 在左下角以小字显示 您正在注册的员工的姓名 我知道在我的表单上的某些
  • 使用 typescript 将 javascript 模块导入为动态

    我想导入一个普通的 javascript 模块 例如vhost 使用 CommonJS 进入我的 node js 打字稿文件 我可以用下面的行来做到这一点 import vhost require vhost 我们假设我在互联网上找不到 d
  • JavaScript-onclick

    第一次在这里发帖 但天知道我一直使用这个网站来搜索问题 P 好吧 我现在遇到了自己的问题 因为我似乎无法轻松地在 Google 上进行搜索 并且在玩完之后搞了两个多小时 终于决定发帖问一下大家的想法 我在这里想要完成的是 当您将鼠标悬停在
  • 如何将json对象数组保存到mongoose?

    我正在尝试将对象数组保存到猫鼬模式 但无法将数据加载到laptop模式我只看到一个插入包含id 如何将 json 对象数组保存到 mongoose 模式 控制器 js var laptopData name Hp probook 15 1
  • 以编程方式创建和呈现模态视图控制器

    我正在尝试以编程方式从使用情节提要启动的视图控制器中声明模式视图控制器 我希望看到一个空白视图 但我只看到来自第一个控制器的 Web 视图 void viewDidLoad super viewDidLoad NSString fullUR
  • 如何将 Excel 工作表导出为图像?

    我正在尝试从 Excel 工作表生成图像 经过大量研究后 我使用以下代码 但在某些时候我遇到了异常 using System using System Collections Generic using System Linq using
  • Flexslider 延迟加载 - 仅在真正需要时加载图像

    这实际上只是对 Flexslider 延迟加载的回答的后续内容here我正在使用我在下面粘贴的代码 我想更改它 以便仅在真正需要时加载图像 我尝试了其他 Flexslider 属性 之前 和之后 但它们在第一张幻灯片上造成了延迟 请问我可以
  • 如何使用 WSO2 ESB 从数据库检索多行?

    我想使用 wso2 esb 检索数据库中的多行 使用 dblookup 中介器我只能检索一行 建议使用 WSO2 DSS 你能帮我使用 DSS 完全检索 ESB 中的多行吗 Thanks 如果您不想使用 DSS 这就是我们的情况 那么您可以
  • React js组件,map可以工作,foreach不行

    我有一个呈现标签的组件 它循环遍历地图并显示数据 我尝试使用 forEach 但它不起作用 但是 如果我将映射转换为数组 它就可以工作 foreach 也不适用于数组 我在这里缺少什么 这有效 render return div class
  • 重命名模型和关系字段的 Django 迁移策略

    我计划重命名现有 Django 项目中的多个模型 其中有许多其他模型与我要重命名的模型具有外键关系 我相当确定这将需要多次迁移 但我不确定确切的过程 假设我从 Django 应用程序中的以下模型开始 名为myapp class Foo mo
  • Zoom:1;有什么bug在 CSS 中修复?

    我见过人们应用 CSS 属性zoom 1 在 HTML 元素上 他们为什么这样做 它修复了什么错误 这提供了一个称为hasLayout在 Internet Explorer 版本 7 及更低版本中 关于这个主题的权威文章在这里 http w
  • 在 iPhone 应用程序启动期间(即应用程序加载期间)播放电影文件

    我想播放电影文件或任何动画文件 直到时间应用程序未完全加载 有什么简单的方法可以做到吗 告诉别人他们想做什么是值得怀疑的 我的客户想要播放一部电影 而这只是一部 3 秒的电影 这就是所谓的品牌推广 如果他的用户不喜欢它 他们会告诉他
  • QT QImage - 将图像的一部分复制为多边形

    尝试将图像的一部分复制为多边形 特别是五边形 但我更感兴趣的是如何复制为除矩形之外的任何内容 以下代码仅允许复制为矩形 QImage copy const QRect rect QRect const inline QImage copy