Windows API `GetPixel()' 总是返回 `CLR_INVALID`,但是 `SetPixel()` 效果很好?

2024-04-12

我的操作系统是 windows 7 64 位,有 2 个显示器显示。

I use GetPixel(),但它总是返回CLR_INVALID结果是这样的:

COLORREF result = GetPixel(dc,x,y);

My GetDeviceCaps(RASTERCAPS)返回结果RC_BITBLT已启用。GetDeviceCaps(COLORMGMTCAPS)返回结果为CM_GAMMA_RAMP.

最重要的是,如果我SetPixel(dc,x,y,RGB(250,250,250))提前,并且GetPixel(dc,x,y)稍后我可以ALWAYS检索正确的结果,如下所示:

COLORREF result = SetPixel(dc,x,y,RGB(250,250,250));
COLORREF cr = GetPixel(dc,x,y);

所以我觉得我的协调性应该没问题。我不知道为什么GetPixel()总是回来CLR_INVALID, but SetPixel()总是运作良好吗?有什么建议么?


From GetPixel http://msdn.microsoft.com/en-us/library/windows/desktop/dd144909%28v=vs.85%29.aspx文档

必须在设备上下文中选择位图,否则, 所有像素均返回 CLR_INVALID。

尝试下面的代码,看看它是否适用于您的设备上下文。

HDC dc = ... // <-- your device context
HDC memDC = CreateCompatibleDC(dc);
HBITMAP memBM = CreateCompatibleBitmap(dc, 1, 1);
SelectObject(memDC, memBM);

int x = ... // point's coordinates
int y = ...
BitBlt(memDC, 0, 0, 1, 1, dc, x, y, SRCCOPY);

COLORREF cr = GetPixel(memDC, 0, 0);
std::cout << cr << std::endl;

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

Windows API `GetPixel()' 总是返回 `CLR_INVALID`,但是 `SetPixel()` 效果很好? 的相关文章

  • 如何使用 WinAPI 读取 MessageBox 文本

    如何读取标准Win消息框 Info 的消息 Using SendMessage this HandleControl WM GETTEXT builder Capacity builder 我只能读取消息框的标题或按钮的文本 但不能读取消息
  • 微软怎么能说WinAPI中一个字的大小是16位呢?

    我刚刚开始学习WinAPI 在MSDN中 对WORD数据类型提供了以下解释 WORD16 位无符号整数 范围是十进制 0 到 65535 该类型在 WinDef h 中声明如下 typedef 无符号短 WORD 很简单 而且它与我一直在使
  • 有没有办法找到dll公开的所有函数

    我一直在寻找一种方法来获取映射到 dll 中函数名称的所有字符串 我的意思是您可以调用 GetProcAddress 的所有字符串 如果你对 dll 进行十六进制转储 符号 字符串 就在那里 但我认为必须有一个系统调用来获取这些名称 如果您
  • 如何拥有程序执行时间的控制台?

    我正在尝试编写一个在控制台或 GUI 模式下工作的程序 具体取决于执行参数 我已经成功编写了以下示例代码 using System using System Collections Generic using System Linq usi
  • 如何将dll作为服务运行?

    我知道如何编写 dll 如何编写服务以及如何运行 dllrundll32 但现在我想编写一个在Windows中作为服务安装的dll 我不知道这是否可能或应该导出 dll 中的哪个函数 如何将 dll 作为服务安装并运行 有几种不同的方法可以
  • Windows 中的 JNA:使用 Windows 作业自动终止子进程

    我需要在 Windows 中的 java 应用程序中启动一个子进程 最终可以通过任务管理器杀死 终止我的 java 应用程序 因此 我需要将此子进程与父进程 链接 如果父进程终止 则两者都会终止 在 Windows API 中我们有创建作业
  • C++中最大化窗口时的问题

    我的程序需要任意最大化当前桌面上的任何窗口 我通过调用来实现这一点ShowWindow hWnd SW MAXIMIZE 其中 hWnd 是HWND我想要最大化的窗口 当该行代码执行时 相关窗口 此处为记事本 如下所示 一切看起来都很好 除
  • 我可以保存控制台窗口的缓冲区或内容以供将来使用吗?

    我对控制台应用程序很感兴趣 只是想知道 保存控制台窗口的当前缓冲区以供以后使用并提供某种历史导航功能的最佳方法是什么 我知道 Diagnostics 命名空间提供了读取标准输出的能力 但这只是在您重定向它的情况下进行的 所以基本上您必须在新
  • win32 Python - pythoncom 错误 - ImportError: 没有名为 pywintypes 的模块

    我正在尝试导入 pythoncom 但它给了我这个错误 Traceback 最近一次调用最后 文件 F Documents and Settings Emery Desktop Python 27 Try 第 2 行 位于 导入python
  • Windows BlockInput 功能不起作用

    Why BlockInput不工作 include
  • 如何使用 Visual C++ 在 win32 API 中创建圆形/圆形按钮

    我有一个 Visual C 中的 Window Win32 API 应用程序 我没有使用MFC 我必须创建一个带有位图图像的圆形 圆形按钮 我的应用程序有一个皮肤视图 任何人都可以帮助我完成这项任务吗 按钮是窗口 您可以使用 CreateW
  • 了解 IServiceProvider 和 QueryService

    谁能解释一下背后的想法IServiceProvider and QueryService 我不明白服务是什么以及它与其他类型的对象或接口有何不同 我看到的解释很少 主要是一些评论here https learn microsoft com
  • 使用 FILE_FLAG_NO_BUFFERING 会带来明显的速度增益吗?

    最近在MSDN中注意到FILE FLAG NO BUFFERING标志的详细描述 并阅读了几条关于Windows中无缓冲I O的Google搜索结果 http msdn microsoft com en us library aa36385
  • 如何查找 Outlook .pst 文件的完整路径?

    有没有办法通过 API 调用或注册表项以编程方式查找当前用户的 Outlook pst 文件的位置 With 展望赎回 http www dimastr com redemption 您可以使用 VBA 迭代消息存储RDOStores集合
  • 如何获取与Windows主题相关的图标?

    如何获取Windows中某个控件的图标 更具体地说 我想从 ListView 标题中获取排序箭头图标 我尝试使用以下方法来获取它 HRESULT GetSortArrowBmp HWND hwnd HEADERSORTARROWSTATES
  • 在 win32 API 应用程序中实现全球化/多语言功能

    我用 Visual C 开发了一个窗口应用程序 Win32 API 我必须在此应用程序中添加多语言功能 任何人都可以指导我如何完成这项任务 Windows 上多语言应用程序的基础是 资源 的使用 资源是附加在可执行文件末尾的块 它仅包含数据
  • 为什么单线程异常会导致整个程序崩溃(如何防止这种情况?)

    例如 如果我跑步 int x 0x00000 程序崩溃了 但为什么整个程序崩溃而不是单个线程崩溃呢 我创建了多个连续睡眠的线程来测试这一点 有什么方法可以让当前线程退出 而不是整个程序 在Windows上使用winapi Thanks 但为
  • 32 位 OpenFileDialog --> 64 位 System32?

    在 32 位程序中 如何让打开 保存文件对话框显示 64 位系统的 System32 文件夹中的文件 Wow64DisableWow64FsRedirection不起作用 因为由于某种原因它不适用于对话框 我猜是因为它位于不同的线程上 当然
  • NtDll 真的导出 C 运行时函数吗?我可以在我的应用程序中使用这些函数吗?

    我在查看 Windows 10 计算机上的 NtDll 导出表 发现它导出标准 C 运行时函数 例如memcpy sprintf strlen etc 这是否意味着我可以在运行时动态调用它们LoadLibrary and GetProcAd
  • 更换 I 过滤器

    我目前正在使用 IFilters 从各种文件 word excel tiff pdf 等 中提取文本 据我所知 IFilter 已在 Windows 8 中停止使用 是否有人对如何在不安装本机应用程序的情况下提取文本有任何建议 如果有什么用

随机推荐