在本机 C++ 中锁定 GDI+ 位图?

2024-01-01

我可以找到很多关于如何在托管 c++ 中执行此操作的示例,但没有找到非托管的示例。

我希望尽可能高效地获取所有像素数据,但我需要更多有关 scan0 内容的一些信息,以便我可以正确地迭代像素数据并从中获取每个 rgba 值。

现在我有这个:

  Bitmap *b = new Bitmap(filename);
  if(b == NULL)
  {
   return 0;
  }

  UINT w,h;
  w = b->GetWidth();
  h = b->GetHeight();
  Rect *r = new Rect(0,0,w,h);
  BitmapData *lockdat;
 b->LockBits(r,ImageLockModeRead,PixelFormatDontCare,lockdat);

  delete(r);
  if(w == 0 && h == 0)
  {
   return 0;
  }

  Color c;

  std::vector<GLubyte> pdata(w * h * 4,0.0);

  for (unsigned int i = 0; i < h; i++) {
   for (unsigned int j = 0; j < w; j++) {
    b->GetPixel(j,i,&c);

    pdata[i * 4 * w + j * 4 + 0] = (GLubyte) c.GetR();
    pdata[i * 4 * w + j * 4 + 1] = (GLubyte) c.GetG();
    pdata[i * 4 * w + j * 4 + 2] = (GLubyte) c.GetB();
    pdata[i * 4 * w + j * 4 + 3] = (GLubyte) c.GetA();
   }
  }
  delete(b);

  return CreateTexture(pdata,w,h);

如何使用 lockdat 执行与 getpixel 相同的操作? 谢谢


lockdat->Scan0 是指向位图像素数据的指针。请注意,您really请务必关心您要求的像素格式,PixelFormatDontCare 不会这样做。因为指针的使用方式受到像素格式的影响。 PixelFormat32bppARGB是最简单的,一个像素是一个int的大小,4个字节代表alpha、红、绿和蓝。步幅将等于位图的宽度。一个简单的 memcpy() 就可以完成工作。请注意位图存储颠倒。

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

在本机 C++ 中锁定 GDI+ 位图? 的相关文章

  • 删除文件的最后 10 个字符

    我想删除文件的最后 10 个字符 说一个字符串 hello i am a c learner 是文件内的数据 我只是希望该文件是 hello i am a 文件的最后 10 个字符 即字符串 c learner 应在文件内消除 解决方案 将
  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • BASIC 中的 C 语言中的 PeekInt、PokeInt、Peek、Poke 等效项

    我想知道该命令的等效项是什么Peek and Poke 基本和其他变体 用 C 语言 类似PeekInt PokeInt 整数 涉及内存条的东西 我知道在 C 语言中有很多方法可以做到这一点 我正在尝试将基本程序移植到 C 语言 这只是使用
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么

随机推荐

  • SSL 握手失败:SSL 错误:检测到证书中的密钥使用违规

    我已经在ubuntu中安装了kdesvn 但是当我尝试结帐时 出现此错误 SSL handshake failed SSL error Key usage violation in certificate has been detected
  • 有 pre-K&R c 的任何文档吗?

    我正在玩在线 PDP11 模拟器 link http pdp11 aiju de 并正在查看其编程部分FAQ http aiju de code pdp11 programming 它是这样描述在模拟器上用 C 语言编程的 你需要编写 pr
  • 使用 NHibernate 部分填充子集合

    我已经为此苦苦挣扎了一段时间 似乎无法弄清楚 我有一个BlogPost类 它有一个集合Comments 并且每个评论都有一个DatePosted field 我需要做的是查询BlogPost并以部分加载的方式返回它Comments集合 说的
  • 核心图 - 防止缩放/缩放图以显示完整的轴范围

    我的 y 轴边界从 0 到 100 x 轴边界从 0 到 10 当我绘制数据点 0 85 和 1 86 时 仅显示包含数据点的绘图部分 我明白这有什么用处 但就我而言 我需要显示整个轴 未缩放 有没有办法显示完整的轴 而无需缩放到数据点 感
  • 在 WPF 中向 DataGrid 添加行?

    因此在 WinForms 中您可以轻松添加一行 例如 dataGridView1 Rows Add user Handle c 但在 WPF 中 当我尝试使用 DataGrid 时 没有 行 属性 有没有什么方法可以在 WPF 中做到这一点
  • redis.conf 中的“tcp-backlog”是什么

    我很困惑tcp backlog在 redis conf 中 TCP listen backlog In high requests per second environments you need an high backlog in or
  • 如何处理SonataAdminBundle列表视图中的每个实体?

    如何将一些代码应用于管理员列表视图中显示的每个实体 例如 如果我有一个TagManager并且需要为每个显示的实体加载标签 我该怎么做 是否有一种方法可以在实体的管理中覆盖 或者我可以绑定到某些列表表单事件吗 我找不到地方可以做到这一点 我
  • 使用 hyper 将块流异步写入文件

    我正在尝试创建一个简单的函数 使用 hyper 将远程文件下载到本地文件路径 我也需要异步写入文件 在我的例子中我使用tokio fs为了那个原因 这是代码 Parts of the code were omitted see the pl
  • 将文件读入结构体 (C++)

    我正在尝试从二进制文件读取数据并将其放入结构中 的前几个字节data bin are 03 56 04 FF FF FF 我的实现是 include
  • .NET MAUI 中的 Android 深度链接(意图)支持

    我目前正在尝试向使用 NET MAUI 编写的 Android 应用程序添加深度链接支持 通过 Intents 我添加了一个activityXML 元素下应用我的 AndroidManifest xml 中的元素
  • 使用 NGINX 将 Gatsby 托管在子目录上

    我如何使用 nginx 将 gatsby js 托管在子目录上 我已经尝试过使用proxy pass http 127 0 0 1 8000 with gatsby develop但我遇到了 Socket io 的问题 有谁知道如何在我尝试
  • GetMessage 超时

    我有一个第二个线程调用的应用程序GetMessage 循环中 在某个时刻 第一个线程意识到用户想要退出应用程序并通知第二个线程它应该终止 由于第二个线程被卡住GetMessage 程序永远不会退出 有没有办法让消息超时等待 我也对其他想法持
  • 使用 OrderBy、ThenBy 排序

    我正在尝试根据先前排序的列对表的几列进行排序 它对于前两列效果很好 但是 一旦我对第三列进行排序 第二列就会失去排序 据我目前所知 我的 foreach 循环一定有问题 这是我的排序代码 public List inhaltSortiere
  • gif动画完成时触发javascript

    我有一个网站 上面有一个不重复的 gif 所以看起来正在加载 我想要一个 javascript 脚本来检测 gif 动画何时完成 然后重定向到另一个站点 这可能吗 我不能只将其设置为 5 秒 因为不同的计算机 平板电脑在不同的时间加载它 如
  • [React]将异步数据获取到组件中的不同方式

    我对 React 世界有点陌生 最近当我开始在组件内编写 Ajax 内容时 我感到很困惑 据我所知 这里有两种渲染方式异步将数据放入组件中 如下所示 1st way class MyComponent extends React Compo
  • 使用 free() 时出现分段错误

    此代码会导致分段错误 int main char p char a 50 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa p char malloc 50 sizeof char if p
  • “[文章] 使用 WSO2 API Manager 启用 API 货币化”相关问题

    我尝试根据文章将 POC WSO2 APIM 与计费引擎集成1 http wso2 com library articles 2016 07 article enabling monetization of apis with wso2 a
  • 将值和数字格式从一个范围复制到另一个范围?

    下面的行没有出现错误 我将值从一个范围复制到另一个范围 ThisWorkbook Sheets Output Range F lastRowOutput 1 M lastRowOutput 1 Value projectWb Sheets
  • 使用 Zoom SDK 最小化视频通话和共享视图

    我正在尝试将 Zoom SDK 会议集成到 Android 应用程序中 我已经努力使用自定义会议用户界面并学习如何使用 Zoom 的视频视图 称为MobileRTCVideoView 这是我想创建的界面 我尝试过的 研究了 Zoom 的示例
  • 在本机 C++ 中锁定 GDI+ 位图?

    我可以找到很多关于如何在托管 c 中执行此操作的示例 但没有找到非托管的示例 我希望尽可能高效地获取所有像素数据 但我需要更多有关 scan0 内容的一些信息 以便我可以正确地迭代像素数据并从中获取每个 rgba 值 现在我有这个 Bitm