首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >一种更好的绘制网格作为背景的方法

一种更好的绘制网格作为背景的方法
EN

Stack Overflow用户
提问于 2012-09-07 09:48:21
回答 2查看 1.1K关注 0票数 1

我想绘制网格,如下图所示。

我知道一个技巧,通过绘制6条垂直线和水平线而不是6 x 6个小矩形来绘制它。

但是,如果我想要更小的缩放(用于查看图片的缩放),行很多。例如,假设我的视图窗口大小为800 x 600,正在查看一张大小为400 x 300的图片(因此放大为2)。将有400 x 300个大小为2 x 2的矩形(每个矩形代表一个像素)。

如果我画每个单元格(在一个循环中,比方说400 x 300次),它是非常慢的(当我移动窗口...)。使用这个技巧可以解决这个问题。

我仍然很好奇在winapi中有没有更好的方法来完成这个任务,GDI(+)。例如,像DrawGrid(HDC hdc, int x, int y, int numOfCellsH, int numOfCellsV)这样的函数

另一个问题是:如果我不调整大小,移动窗口,或者不改变放大,网格就不会改变。因此,即使我不断更新图片(捕获屏幕),也没有必要重新绘制网格。但是我使用StretchBltBitBlt来捕获屏幕(到内存DC,然后是窗口的hdc ),如果我没有在内存DC中重新绘制网格,那么网格就会消失。有没有办法让网格停留在那里并更新屏幕截图的位图?

ps:这不是一个真正的问题。因为我想在缩放不小于10的时候绘制网格(所以每个单元格的大小都是10x10或更大)。在这种情况下,最多有100 + 100 = 200条线要绘制,而且速度很快。我只是好奇是否有更快的方法。

EN

回答 2

Stack Overflow用户

发布于 2012-09-07 12:39:00

您是否考虑过使用CreateDIBSection这将允许您使用一个指针,以便您可以快速处理R、G、B值,例如,下面的代码将创建一个256x256x24的位图,并以64像素的间隔绘制一个绿色方块:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
BITMAPINFO BI = {0};
BITMAPINFOHEADER &BIH = BI.bmiHeader;
BIH.biSize = sizeof(BITMAPINFOHEADER);
BIH.biBitCount  = 24;
BIH.biWidth     = 256;
BIH.biHeight    = 256;
BIH.biPlanes    = 1;
LPBYTE pBits = NULL;
HBITMAP hBitmap = CreateDIBSection(NULL, &BI, DIB_RGB_COLORS, (void**) &pBits, NULL, 0);
LPBYTE pDst = pBits;
for (int y = 0; y < 256; y++)
{
    for (int x = 0; x < 256; x++)
    {
        BYTE R = 0;
        BYTE G = 0;
        BYTE B = 0;
        if (x % 64 == 0) G = 255;
        if (y % 64 == 0) G = 255;
        *pDst++ = B;
        *pDst++ = G;
        *pDst++ = R;
    }
}
HDC hMemDC = CreateCompatibleDC(NULL);
HGDIOBJ hOld = SelectObject(hMemDC, hBitmap);
BitBlt(hdc, 0, 0, 256, 256, hMemDC, 0, 0, SRCCOPY);
SelectObject(hMemDC, hOld);
DeleteDC(hMemDC);
DeleteObject(hBitmap);
票数 0
EN

Stack Overflow用户

发布于 2012-09-07 16:29:24

一般来说,这些类型的图形操作的主要限制因素是填充率和函数调用的数量。

填充速率是机器更改像素值的速度。一般来说,blits (复制矩形区域)非常快,因为它们经过高度优化,并设计为以缓存友好的顺序访问内存。但是blit会触及该区域中的所有像素。如果你打算透支,或者那些像素中的大部分不需要改变,那么只绘制你需要的像素可能会更有效,即使这并不是缓存友好的。

如果您通过制作n个事物来绘制n个原语,那么当n变大时,这可能是一个限制因素,并且寻找一个允许您一次绘制多条(或全部)线的API调用可能是有意义的。

您的“技巧”演示了这两个优化。绘制20条线比绘制100个矩形的调用少得多,而且它涉及的像素要少得多。随着窗口的增大或网格大小的减小,线方法在调用次数和接触的像素方面都将线性增加,而rectangle方法将增长为n^2。

当涉及到最小像素数时,我不认为你能做得更好。但我认为,如果你画了很多线,函数调用的数量可能会成为一个因素。我不知道GDI+,但在普通的GDI中,有像PolylinePolyPolyline这样的函数可以让你在一次调用中画出几条线。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12315724

复制
相关文章
CVE-2020-17049:Kerberos实际利用
青铜位漏洞已被开发为的延伸Impacket从在好乡亲框架SecureAuth。一个拉请求目前正在等待新开发的功能合并。Impacket内有很多强大的功能,但是我们对getST.py程序感兴趣。让我们首先回顾一下没有利用漏洞的程序功能。在第4步,我们将从上方跳入攻击路径。假设我们已经获得了Service1的哈希值,Service1与Service2具有受限的委托信任关系,并且我们试图以目标用户身份获得对Service2的访问权限。
Khan安全团队
2020/12/15
1.3K0
Kerberos相关问题进行故障排除| 常见错误和解决方法
此消息表明一个操作尝试要求以Kerberos的user/host@realm身份认证的操作,但票据cache中没有用于user/host@realm的票据。
大数据杂货铺
2021/03/25
46.5K0
看完您如果还不明白 Kerberos 原理,算我输!
强大的身份验证和建立用户身份是 Hadoop 安全访问的基础。用户需要能够可靠地 “识别” 自己,然后在整个 Hadoop 集群中传播该身份。完成此操作后,这些用户可以访问资源(例如文件或目录)或与集群交互(如运行 MapReduce 作业)。除了用户之外,Hadoop 集群资源本身(例如主机和服务)需要相互进行身份验证,以避免潜在的恶意系统或守护程序 “冒充” 受信任的集群组件来获取数据访问权限。
create17
2019/08/30
17K0
Domain Escalation: Unconstrained Delegation
在Windows 2000之后微软引入了一个选项,用户可以通过Kerberos在一个系统上进行身份验证,并在另一个系统上工作,这种技术主要通过委派机制来实现,无约束委派通过TGT转发技术实现,而这也是我们将本文中讨论的内容
Al1ex
2022/09/07
8190
Domain Escalation: Unconstrained Delegation
配置客户端以安全连接到Kafka集群- Kerberos
这是有关Apache Kafka安全性的简短博客文章系列的第一部分。在本文中,我们将说明如何配置客户端以使用不同的身份验证机制对集群进行身份验证。
大数据杂货铺
2021/02/07
5.9K0
spring security 深度使用
springsecurity是一个典型的责任链模式;我们先新建一个springboot项目,进行最基本的springsecurity配置,然后debug;我这里使用的开发工具是idea.建议大家也使用idea来进行日常开发。好了话不多说,开始:
六个核弹
2022/12/23
5770
spring security 深度使用
Kerberos基本概念及原理汇总
强大的身份验证和建立用户身份是Hadoop安全访问的基础。用户需要能够可靠地“识别”自己,然后在整个Hadoop集群中传播该身份。完成此操作后,这些用户可以访问资源(例如文件或目录)或与集群交互(如运行MapReduce作业)。除了用户之外,Hadoop集群资源本身(例如主机和服务)需要相互进行身份验证,以避免潜在的恶意系统或守护程序“冒充”受信任的集群组件来获取数据访问权限。
create17
2019/01/06
12.4K0
Kerberos基本概念及原理汇总
Cloudera安全认证概述
身份验证是任何计算环境的基本安全要求。简单来说,用户和服务必须先向系统证明其身份(身份验证),然后才能在授权范围内使用系统功能。身份验证和授权携手并进,以保护系统资源。授权使用多种方式处理,从访问控制列表(ACL)到HDFS扩展ACL,再到使用Ranger的基于角色的访问控制(RBAC)。
大数据杂货铺
2020/02/11
2.9K0
Cloudera安全认证概述
SPN 劫持:WriteSPN 滥用的边缘案例
假设攻击者破坏了为约束委派设置的帐户,但没有 SeEnableDelegation 权限。攻击者将无法更改约束 (msDS-AllowedToDelegateTo)。但是,如果攻击者对与目标 SPN 关联的帐户以及另一台计算机/服务帐户拥有 WriteSPN 权限,则攻击者可以临时劫持 SPN(一种称为 SPN 劫持的技术),将其分配给另一台计算机/服务器,并执行完整的 S4U 攻击以破坏它。
Khan安全团队
2022/02/11
1.2K0
Spring Security 简单了解使用
Spring Security 是一个基于 Spring 框架的安全框架,提供了一套安全性认证和授权的解决方案,用于保护 Web 应用程序和服务。
Jimmy_is_jimmy
2023/08/02
2770
Spring Security 简单了解使用
CDP私有云基础版用户身份认证概述
对于任何计算环境来讲,身份验证是最基本的安全要求。简单来说,用户和服务必须先向系统证明其身份(身份验证),然后才能在授权范围内使用系统功能。身份验证和授权携手并进,以保护系统资源。授权有多种方式处理,从访问控制列表(ACL)到HDFS扩展的ACL,再到使用Ranger的基于角色的访问控制(RBAC)。
大数据杂货铺
2021/03/09
2.5K0
spring security使用与分析
使用spring-boot(1.5.10.RELEASE) 和spring-security(4.2.4.RELEASE)作为依赖环境
sucl
2019/08/07
3770
spring security使用与分析
以最复杂的方式绕过 UAC
让我们从系统如何防止您绕过最无意义的安全功能开始。默认情况下,如果用户是本地管理员,LSASS 将过滤任何网络身份验证令牌以删除管理员权限。但是有一个重要的例外,如果用户是域用户和本地管理员,则 LSASS 将允许网络身份验证使用完整的管理员令牌。如果说您使用Kerberos在本地进行身份验证,这将是一个问题。这不是微不足道的 UAC 绕过吗?只需以域用户身份向本地服务进行身份验证,您就会获得绕过过滤的网络令牌?
Khan安全团队
2022/03/25
1.9K0
没有 SPN 的 Kerberoasting
服务主体名称 (SPN) 是 Active Directory (AD) 数据库中的记录,显示哪些服务注册到哪些帐户:
Khan安全团队
2022/01/04
1.3K0
Spring Security 4 安全视图片段 使用标签(Spring Security 标签)
原文地址: http://websystique.com/spring-security/spring-security-4-secure-view-layer-using-taglibs/
明明如月学长
2021/08/27
9810
Kerberos 身份验证在 ChunJun 中的落地实践
Kerberos,在古希腊神话故事中,指的是一只三头犬守护在地狱之门外,禁止任何人类闯入地狱之中。
袋鼠云数栈
2022/12/16
1.6K0
Spring Security(使用hibernate-validator)
hibernate-validator是Hibernate项目中的一个数据校验框架,是Bean Validation 的参考实现。使用hibernate-validator能够将数据校验从业务代码中脱离出来,增加代码可读性,同时也让数据校验变得更加方便、简单。如果参数不能通过校验,报400错误,请求格式不正确。
用户7386338
2020/05/29
1.1K0
Spring Security 系列(3) —— Spring Security & Webflux
进入登陆页面,输入 test 的用户名和密码,在登陆成功后请求 test3 可以看到被校验通过
求和小熊猫
2022/09/08
2.3K0
Spring Security 系列(3) —— Spring Security & Webflux
Spring Boot Security 基本使用一
众所周知,如果要对Web资源进行保护,最好的办法莫过于Filter,要想对方法调用进行保护,最好的办法莫过于AOP。Spring Security核心是一系列Filter,对资源进行过滤,这篇文档写的蛮不错的: https://my.oschina.net/u/865921/blog/159849. Spring Security包括两块内容,Authentication(认证)和 Authorization(授权,也叫访问控制)。简单来说,认证即你是谁,授权即你有用什么权限。”认证”是认证主体的过程,通常是指可以在应用程序中执行操作的用户、设备或其它系统。”授权”是指是否允许已认证的主体执行某一项操作。
芥末鱿鱼
2022/05/05
4000
Spring Boot Security 基本使用一
Spring Security
springBoot 2.5.5 + Mybatis + Spring Security 5.x
P轴
2022/11/18
7900

相似问题

转发的Kerberos票证能续签吗?

15

Spring Security、Kerberos扩展和AD

25

Spring security kerberos扩展用于生产?

10

使用GSSManager验证Kerberos票证

34

使用Spnego解密kerberos票证

51
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文