问题标签 [hbitmap]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 显示 HBITMAP
我先道歉;我是c新手,我真的不知道自己在做什么。
我正在尝试使用 Windows 7 和 c 捕获并显示屏幕截图。我知道这听起来很愚蠢,最终我将在不同的程序中需要这些功能中的每一个,捕获屏幕的那个会将图像发送到显示它的那个,但现在我只是想让它们都在一个程序中工作. 这是我到目前为止整理的代码:
我只是找不到任何显示 HBITMAP 的方法。如何显示 HBITMAP?
更新:我添加了 DrawBitmap 但它不起作用......我得到以下输出,但不知道如何处理它:
'win_screenshot.exe':已加载 'C:\Users\mbrooker\Documents\Visual Studio 2010\Projects\win_screenshot\Debug\win_screenshot.exe',已加载符号。“win_screenshot.exe”:已加载“C:\Windows\SysWOW64\ntdll.dll”,找不到或打开 PDB 文件“win_screenshot.exe”:已加载“C:\Windows\SysWOW64\kernel32.dll”,找不到或打开 PDB 文件“win_screenshot.exe”:加载“C:\Windows\SysWOW64\KernelBase.dll”,找不到或打开 PDB 文件“win_screenshot.exe”:加载“C:\Windows\SysWOW64\user32.dll” , 无法找到或打开 PDB 文件 'win_screenshot.exe': 已加载 'C:\Windows\SysWOW64\gdi32.dll', 无法找到或打开 PDB 文件 'win_screenshot.exe': 已加载 'C:\Windows\SysWOW64\ lpk.dll', 无法找到或打开 PDB 文件 'win_screenshot. 已加载符号。“win_screenshot.exe”:已加载“C:\Windows\SysWOW64\imm32.dll”,找不到或打开 PDB 文件“win_screenshot.exe”:已加载“C:\Windows\SysWOW64\msctf.dll”,找不到或打开 PDB 文件“win_screenshot.exe”:加载“C:\Windows\SysWOW64\apphelp.dll”,找不到或打开 PDB 文件“win_screenshot.exe”:加载“ImageAtBase0x4ab60000”,加载被包含/排除设置禁用。“win_screenshot.exe”:已卸载“ImageAtBase0x4ab60000”程序“[1480] win_screenshot.exe:Native”已退出,代码为 0 (0x0)。win_screenshot.exe':已加载“C:\Windows\SysWOW64\apphelp.dll”,无法找到或打开 PDB 文件“win_screenshot.exe”:已加载“ImageAtBase0x4ab60000”,已通过包含/排除设置禁用加载。“win_screenshot.exe”:已卸载“ImageAtBase0x4ab60000”程序“[1480] win_screenshot.exe:Native”已退出,代码为 0 (0x0)。win_screenshot.exe':已加载“C:\Windows\SysWOW64\apphelp.dll”,无法找到或打开 PDB 文件“win_screenshot.exe”:已加载“ImageAtBase0x4ab60000”,已通过包含/排除设置禁用加载。“win_screenshot.exe”:已卸载“ImageAtBase0x4ab60000”程序“[1480] win_screenshot.exe:Native”已退出,代码为 0 (0x0)。
c++ - 将现有 HBITMAP 重置为桌面背景 (Win32)
我希望在桌面上创建一个透明窗口。
为此,我创建了一个具有桌面背景的 HDC(创建了桌面的 HBITMAP 并将其应用于我的 HDC),并调用了 UpdateLayeredWindow。
到现在为止还挺好。
对于性能问题,我需要保留一个持久的 GDI+ 对象,这意味着我的 HDC 和 HBITMAP 需要在绘画之间保持相同的句柄(假设桌面 DC 没有改变),与这个问题相同。
在第一次绘画迭代中一切顺利。在第二次绘画迭代中,由于 HDC 和 HBITMAP 没有改变,我在现有的 HDC 上重新绘画,这意味着我得到了双图像(背景没有被擦除)。
这是我正在做的代码示例:
有任何想法吗?
winapi - 使用 Windows GetDIBits 函数获取位图像素值
我正在尝试使用 GetDIBits 函数获取位图的像素。由于我没有研究过 Windows GDI/API,我对第一个论点 HDC 非常不确定。我在 SO 和网络上搜索了无数帖子,但无法找到有关如何在这种特定情况下初始化 HDC 的信息或示例。这是我读取像素值的程度:
解决方案:
在网上搜索了一些之后,我已经能够拼凑出以下内容:
c++ - 当我使用 DC 时,我是否应该总是在使用新对象完成工作后替换默认对象
我只是使用创建的临时 DC:
然后我在这个临时 DC 上画了一些图像。我想在这个 DC 中获取图像,所以我CreateCompatibleBitmap()
用来创建一个临时位图并用于在 DCSelectObject()
中获取原始图像HBITMAP
。
我DeleteDC()
现在只想在用完原始位图后,删除原始位图。
这是错的吗?
当我使用 DC 时,我是否应该总是在新对象完成工作后替换原始对象?
c# - 将位图从 C# 传递到 C++ 非托管代码
我试图在 C# 中编写代码以将位图传递给非托管 c++ DLL 并返回 POINT 结构,但没有成功。
我在互联网上做了很多研究,但没有找到“Gotcha”文章或一段代码来帮助我解决我的问题。
到目前为止,我能想到的最好的方法是一个非托管 c++ DLL,用托管 c++ dll 包装,由我的 C# 应用程序调用。在测试中,我可以传递简单的类型,例如整数并毫无问题地返回整数。现在对于我遇到的问题,位图。
我尝试传递 HBITMAP(在 c# 中使用我的位图的 GetHBitmap() 函数),但在编译“无法将参数 1 从 'System::IntPtr' 转换为 'HBITMAP'”和“Class1.FindImage( void *, void *) 由于其保护级别而无法访问”。
这是我的一些代码:
主应用:
进口包装.h:
导入包装.cpp:
ImgFuncs.h
ImgFuncs.cpp
我做错了什么,还是我的方法完全偏离了地图?我很乐意接受有关正确编码我正在尝试做的事情的任何建议。我有一些 C++ 代码,用于在另一个运行速度非常快的图像中查找图像。不幸的是,即使在 c# 中使用 lockbits,它也不够快。所以我想利用 c++ 代码进行图像搜索。
我相信我会遇到更多的障碍,但如果我能克服这个绊脚石,我可能会处理它。如您所见,我的 C++ 知识有限。
video - 从 IGraphBuilder 获取 HBitmap
我正在尝试从 IGraphBuilder 编码视频,为此我需要一个 HBitmap 我可以这样做吗?
PS 我知道 IGraphBuilder 已经有一个 RenderFile 函数,但是这对我来说太慢了,我也更喜欢在 H264 中渲染
c# - 将 HBitmap 转换为保留 Alpha 通道的位图
我一直在Google和Stack Overflow中搜索,但找不到有效的示例。
我需要将 HBitmap 转换为托管 .NET 位图,但以下代码不保留 alpha 通道。
我在 SO 中找到了这个答案,但它对我不起作用,该示例保留了透明度,但是它将我的图像在 Y 轴上翻转了 180º 并将其旋转了 180º。我不知道为什么。
This other example似乎有效,但它是C++
有人在 C# 中工作,而且非常重要,没有内存泄漏?
提前致谢。
编辑:关于@Hans Passant 的评论,我使用以下代码获取 HBitmap(这是从操作系统(仅 Vista 和 Win7)获取缩略图或图标的 shell 调用。
qt - 删除放置在 QLabel 中的 HBitmap
我的 Qt GUI 上有一系列QLabel
对象,我用 HBITMAP 对象填充它们。这些 HBITMAP 是内存中的缓冲区,它们不存在于磁盘上。
现在我使用QPixmap
s fromWinHBITMAP
to create a
QPixmap which I can then pass to the
QLabel s
setPixmap` 函数。
现在,问题是,当我用另一个覆盖它时,QLabel 中的当前图像会发生什么,它会留在内存中吗?它会被删除吗?
我怀疑它没有被正确删除,因为我的程序在运行大约一个小时后增长到巨大的比例。(1.7GB) 内存。
进行转换的代码是:
c++ - 从 jpeg 内存缓冲区创建 HBITMAP?
我想从 JPEG 格式的字节数组创建 HBITMAP。
我已经搜索过,但我只能从位图文件创建它
有人可以告诉我怎么做吗?
c++-cli - 从 HBITMAP 创建位图 (.NET)
我正在使用 C++/CLI 并且我有一个 rawHBITMAP
调用hStrip
,我必须在 a 中显示它PictureBox
,所以我找到了以下函数System::Drawing::Image::FromHbitmap
,但是这需要我想知道在传递它之前IntPtr
是否需要将我的 raw 转换HBITMAP
为或者我是否需要IntPtr
可以像这样通过它吗?
如果我需要转换,我应该如何转换?我还没有真正找到这种转换方式。不过,我确实找到了另一种方式。