SetROP2

C# 调用SetROP2实现橡皮线效果 在C# .Net中调用相关Win32 api实现橡皮线的交互效果。 立即下载
Windows API SetROP2(int nDrawMode)主要用于设定当前前景色的混合模式。R2_NOT就是取反的意思,即前景色为背景色的反色,经常用R2_NOT来画橡皮线,因为两次取反可以还原背景色。

函数原型:int SetROP2( HDC hdc, int fnDrawMode);

返回值:函数调用成功后返回调用前的模式,调用失败则返回零。

概述

用于设定当前前景色的混合模式。R2_NOT就是取反的意思,即前景色为背景色的反色,经常用R2_NOT来画橡皮线,因为两次取反可以还原背景色。

函数的主要的作用

根据nDrawMode设置的方式重新设定绘图的方式,下面就不同的nDrawMode值具体解释绘图模式是如何改变的。

首先就nDrawMode的取值有以下的情况:

1、R2_BLACK//Pixel is always black. 所有绘制出来的像素为黑色

2、R2_WHITE//Pixel is always white. 所有绘制出来的像素为白色

3、R2_NOP//Pixel remains unchanged. 任何绘制将不改变当前的状态

4、R2_NOT//Pixel is the inverse of the screen color. 当前绘制的像素值设为屏幕像素值的反,这样可以覆盖掉上次的绘图,(自动擦除上次绘制的图形)

5、R2_COPYPEN//Pixel is the pen color. 使用当前的画笔的颜色

6、R2_NOTCOPYPEN//Pixel is the inverse of the pen color. 当前画笔的反色

//下面是当前画笔的颜色和屏幕色的组合运算得到的绘图模式。

7、R2_MERGEPENNOT//Pixel is a combination of the pen color and the inverse of the screen color (final pixel = (NOT screen pixel) OR pen). R2_COPYPEN和R2_NOT的并集

8、R2_MASKPENNOT//Pixel is a combination of the colors common to both the pen and the inverse of the screen (final pixel = (NOT screen pixel) AND pen). R2_COPYPEN和R2_NOT的交集

9、R2_MERGENOTPEN//Pixel is a combination of the screen color and the inverse of the pen color (final pixel = (NOT pen) OR screen pixel). R2_NOTCOPYPEN和屏幕像素值的并集

10、R2_MASKNOTPEN//Pixel is a combination of the colors common to both the screen and the inverse of the pen (final pixel = (NOT pen) AND screen pixel).R2_NOTCOPYPEN和屏幕像素值的交集

11、R2_MERGEPEN//Pixel is a combination of the pen color and the screen color (final pixel = pen OR screen pixel). R2_COPYPEN和屏幕像素值的并集

12、R2_NOTMERGEPEN//Pixel is the inverse of the R2_MERGEPEN color (final pixel = NOT(pen OR screen pixel)). R2_MERGEPEN的反色

13、R2_MASKPEN//Pixel is a combination of the colors common to both the pen and the screen (final pixel = pen AND screen pixel). R2_COPYPEN和屏幕像素值的交集

14、R2_NOTMASKPEN//Pixel is the inverse of the R2_MASKPEN color (final pixel = NOT(pen AND screen pixel)). R2_MASKPEN的反色

15、R2_XORPEN//Pixel is a combination of the colors that are in the pen or in the screen, but not in both (final pixel = pen XOR screen pixel). R2_COPYPEN和屏幕像素值的异或

16、R2_NOTXORPEN//Pixel is the inverse of the R2_XORPEN color (final pixel = NOT(pen XOR screen pixel)). R2_XORPEN的反色

总之,上述api的一个作用是在需要改变绘图的模式时,不需要重新设置画笔,只需要设置不同的绘图的模式即可达到相应的目的。

程序橡皮筋绘图程序的使用实例:

void CXXXView::OnMouseMove(UINT nFlags, CPoint point)

{

// 按下左键移动开始画图

if (nFlags == MK_LBUTTON)

{

// 创建画笔RGB(0x00, 0x00, 0xFF)

HPEN hPen = ::CreatePen(PS_SOLID, m_PenWidth, RGB(0x00, 0x00, 0xFF));

// 使用画笔

::SelectObject(m_hMemDC, hPen);

//设置系统色彩模式取反色

int oldRop=::SetROP2(m_hMemDC,R2_NOTXORPEN);

// 画线

::MoveToEx(m_hMemDC,m_pOrigin.x,m_pOrigin.y, NULL);

::LineTo(m_hMemDC, m_pPrev.x,m_pPrev.y);

//恢复系统默认色彩模式

::SetROP2(m_hMemDC,oldRop);

::MoveToEx(m_hMemDC, m_pOrigin.x, m_pOrigin.y, NULL);

::LineTo(m_hMemDC, point.x, point.y);

m_pPrev = point;

Invalidate(FALSE);

}

}

R2_NOTXORPEN

SetROP2就是设置绘画的模式,绘画模式有很多种,比如最简单的绘画模式就是你的当前画笔是什么颜色,在屏幕上画的就是什么颜色,R2_NOTXORPEN这种绘画模式是这样的,它先把画笔颜色与屏幕颜色异或,(这里异或是数学计算,1与1为0,1与0为1,我们说颜色其实就是二进制数,)异或之后再取反最后得到一个颜色值显示在屏幕上。
举个例子,你使用R2_NOTXORPEN这种绘画模式,你用红色画笔在黑色背景上画一条直线,显示红色,但你再用这只笔在刚画的直线上重画一遍,就相当于把开始画的红线擦除掉了,划线的地方显示为背景色。
R2_NOT绘画模式同样有在同一个地方画两次相当于什么都没画的功能,不过R2_NOT绘画模式第一次画的时候显示颜色并不是你选定的画笔颜色,而是默认的颜色。
这就是这两种绘画模式的区别 

C# 调用SetROP2实现橡皮线 DotNet Framework的GDI+较GDI添加了新的功能并对现有的功能进行了优化,但是Graphics类中没有提供实现类似GDI中SetROP2函数来更改绘图模式的功能。在计算机图形应用程序开发过程中经常用到反色模式来实现用户交互活动线,我们可以在.Net 开发环境调用非托管的Win32 API 来实现上述的功能 立即下载

相关推荐

Cursor Cloud Agent:云原生编程工作流的底层重构

编程工作流正从本地计算范式转向云原生执行范式。Cloud Agent 本质是将代码理解、生成、执行与调试等核心能力下沉至隔离、可控、按需分配的云端虚拟机,通过 Firecracker 微虚拟机实现亚秒级启动,并依托上下文快照、环境镜像化和内核级沙箱保障一致性、算力弹性与数据安全。这一范式突破了传统本地 AI 编程助手在环境依赖、调试能力与企业合规上的根本局限,使 IDE 从编辑工具升维为分布式开发指挥中心。本文深入解析其运行机制与工程落地实践。

weixin_34354173的博客 337

MFC SetROP2(R2_XORPEN)异或方式画动态变色小球

效果动画 去掉异或之后的图像 原理 MFC中可以绘制异或动画 pDC->SetROP2(R2_XORPEN); 如果一个地方有小球表示1,没有小球表示0 第一次在一个地方画的时候为,小球可以展现出来 0^1=1 第二次在同一个地方画的时候,小球被消去 1^1=0 接着只需要加上颜色就阔以实现啦 先随机生成一个RGB数据 在将这个RGB值保存在vector数组中 画小球的时候,画刷...

weixin_44984664的博客 2670

ADS中使用Momentum进行电源完整性分析示例

这个应用可以帮助工程师用更快的时间使用ADS Momentum完成PDN分析。该应用描述了利用ADS Momentum RF模拟器进行PDN分析的方法,大大缩短了计算时间。 该分析主要应用与高速数字设计。 在此应用中使用了以下ADS特性: ADS设计流程集成(ADFI)。 电磁协同仿真。 Momentum仿真。 仿真流程如下: 在Allegro中创建ADFI文件 要将Alleg...

zb6075_lb的专栏 7009

利用SetROP2函数的R2_NOT与R2_NOTXORPEN

利用SetROP2函数的R2_NOT与R2_NOTXORPEN http://blog.youkuaiyun.com/yujiajia388/article/details/7039786 分类: mfc及c++2011-12-04 18:39 72人阅读 评论(0) 收藏 举报 以下转载仅为学习中记录使用~~ 程序要实现的功能很简单,就是在窗口的客户区绘制

anhkgg的专栏 6636

网络安全面试题

在当今社会网络安全行业越来越发达,也有越来越多的人去学习,为了更好地进行工作,除了学好知识外还要应对企业的面试。 所以在这里我归总了一些网络安全方面的常见面试题,希望对大家有所帮助。 windows常见 1:描述tcp/udp的区别及优劣,及其发展前景 TCP—传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能...

fzx_hsaj的博客 6万+

字节跳动扣子AI应用开发平台之实战

推出背景:扣子平台由字节跳动推出,旨在让非开发者也能快速创建、调试和优化聊天机器人。上线时间:扣子平台于2024年2月1日正式上线。功能定位:扣子是一个AI聊天机器人和应用程序编辑开发平台,可以理解为字节跳动版的GPTs。

恩爸编程 5897

MFC绘图 利用SetROP2(R2_NOTXORPEN)清除上一次绘制的图案

函数概述 Windows API SetROP2(int nDrawMode)主要用于设定当前前景色的混合模式。R2_NOT就是取反的意思,即前景色为背景色的反色,经常用R2_NOT来画橡皮线,因为两次取反可以还原背景色 函数原型 int SetROP2( HDC hdc, int fnDrawMode); 清除上一次绘制的图像 思路 设置绘制模式为反背景色 画上一个图案 更新记录上一个图案的...

幻月的博客 4802

TOGAF架构内容—TOGAF 内容框架和企业元模型

TOGAF架构内容—TOGAF 内容框架和企业元模型

深圳市多克创新科技有限公司 1663

IAR stm8s : failed to set POR 已解决

下载程序。提示: fail to set POR 用st官方提供的下载工具则可以擦除、下载;回到IAR平台,仍然不行。 解决方法:  1.  项目窗口空白处点右键 -> options ->ST-link 去掉 supress、erase、very三个选项。 2.  菜单栏 ST-LINK->Option bytes , 选中ROP,右键 选择 read-out ...

haoxinliu的博客 1286

Linux LT8912b调试记录(MIPI转LVDS/HDMI)

本文记录了在RK3588平台上使用LT8912B芯片实现MIPI转LVDS/HDMI的调试过程。主要包含设备树配置、驱动代码实现及常见问题解决。调试重点包括:1)正确配置1280x800分辨率的LVDS屏幕参数;2)确保I2C总线正常通信;3)解决花屏、图像抖动、黑屏等问题,涉及lane-rate计算、同步信号极性调整及MIPI模式选择。文中提供了详细的寄存器配置代码和故障排查方法,特别强调了I2C通信验证和电压匹配的重要性。通过参数优化和多种模式测试,最终实现了稳定的视频输出转换。

qq_45147279的博客 1087

基于高频变压器的隔离式推挽栅极驱动电路

摘要:本文介绍了一种基于高频变压器的隔离式推挽栅极驱动电路,通过变压器实现电气隔离,为功率MOS管提供可靠驱动信号。电路包含输入侧PWM信号处理、变压器磁耦合隔离传输以及副边驱动逻辑等关键部分,利用电阻电容网络控制开关速度并防止误触发。该隔离驱动方案广泛应用于高压开关电源、新能源汽车电机控制器、光伏逆变器和工业变频器等需要高电压隔离及抗干扰能力的电力电子设备中,有效保障系统安全性和可靠性。

qq_37999850的博客 483

SETROP2

《Windows程序设计》这本书的作者经常会使用一些相当巧妙但是令人费解的语句。在这个程序中,当我把WM_MOUSEMOVE中的Draw()函数去除了一个时发现画方块的过程中痕迹没有被清除,又百度了一遍才明白,作者用SetROP2(hdc,R2_NOT)实现了一个擦除功能。 /*  * 这个程序是根据第七章BLOCKOUT1.C与BLOCKOUT2.C演化而来的,书上的  * 程序过

zwb8848happy的专栏 1416

15、基于最优传输的协作多视图聚类框架

本文提出了一种基于最优传输理论的协作多视图聚类框架,通过引入协作学习机制在不同视图间建立先验交互,以提升共识聚类的质量。框架包含两种新方法:协作共识投影方法(CoCP)和基于新表示的协作共识方法(CoCNR)。CoCP在全局空间中整合多视图信息并进行共识投影,而CoCNR则通过协作编码生成新的数据表示以实现更优聚类。方法利用熵正则化的Wasserstein距离与Wasserstein重心,有效捕捉数据分布间的几何结构,并通过聚合步骤获得统一模型。实验结果表明,所提方法在多个数据集上均优于现有方法,具有良好的

gpt4scribbler的博客 85

SetROP2设置绘图模式

一、函数原型: int SetROP2( HDC hdc, int fnDrawMode); 二、返回值: 函数调用成功后返回调用前的模式,调用失败则返回零。 三、参数:​ 1、R2_BLACK//Pixel is always black. 所有绘制出来的像素为黑色 2、R2_WHITE//Pixel is always white. 所有绘制出来的像素为白色

小米的修行之路 2614

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

画线 SetROP2

 在WM_MOUSEMOVE中使用SetROP2(R2_NOT)先设此函数,然后绘制一次原来位置的图形,实现擦除效果。

430

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

SetRop2设定绘图方式

<br />一个Windows API SetROP2(int nDrawMode)的使用  该函数的主要的作用是根据nDrawMode设置的方式重新设定绘图的方式,下面就不同的nDrawMode值具体解释绘图模式是如何改变的。  首先就nDrawMode的取值有以下的情况:  R2_BLACK Pixel is always black. //所有绘制出来的像素为黑色  R2_WHITE Pixel is always white. //所有绘制出来的像素为白色  R2_NOP Pixel remains

beckyqiumo的专栏 1032

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

SetROP2 (hdc, R2_NOT) 函数功能测试

函数SetROP2 #include LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM) ; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szA

Time flies 3039

为什么GDI+不支持SetRop2的功能?

好像说是因为SetRop2只针对光栅,而GDI+不只是用于光栅?有官方文档确认吗? 一般来说,新的库应该有方法来取代SetRopt2原来的功能。 这就使得画橡皮条非常困难,网上提供了一些方法以及问题: 1/ 使用DllImport,导入SetRop2  : 这违背了GDI+删去SetRop2的本意。 2/ 更新从起始点到结束点的整个块状区域 : 我觉得为了一条线而刷新整个区域是很愚蠢的...

weixin_34061555的博客 224
上一篇: CArray<int,int>& tmpArray
下一篇: 一步一步写算法(之单向链表)
heary29
博客等级 码龄12年 37粉丝 85原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值