问题标签 [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 - 仅使用 Win32 将 HBITMAP 保存到 *.bmp 文件
我的纯 Win32 项目中有一个 HBITMAP(不使用外部库)。我可以只使用 Winapi 和/或 CRT 函数将它导出到 *.bmp 文件,这样我就不必向项目添加依赖项了吗?
winapi - 为什么在 WM_MOUSEMOVE 中重复调用 createBitmapIndirect 最终返回 NULL?
我正在编写一个复杂的颜色编辑对话框,其中包含一个列表视图控件和一个 Photoshop 样式的 HSV 颜色选择器。该对话框将按描述使用:用户首先单击特定项目,然后操纵颜色选择器上的光标为项目设置正确的颜色,然后单击另一个项目并重复该过程。
我的 hotoshop stle HSV 颜色选择器分为两个矩形 - 1. 256x20 色带,代表完整的 360 跨度 HUE
- 256x256 窗口,显示当前选定 HUE 的所有 VALUES 和 SATURATION 变化。
实现:我做了一些研究并决定使用 GDI 位图。所以我填写GDI BITMAP struct,获取dc,获取comaptable dc,并通过CreateBitmapIndirect 创建hBitmap:
然后在鼠标移动时,我必须检查用户是否在色调渐变中选择了其他 HUE,如果他选择了,那么我需要用新值填充我的 BITMAP 的字节数组。在列表中,为简单起见,每次鼠标移动都需要更改 HUE 并在每次调用时重新填充整个位图。
它适用于 40 或 50 次第一次调用,但随后所有窗口滞后并失去 DC,我可以移动窗口,但该区域不刷新。我的停止标记显示 hBitmap=CreateBitmapIndirect(...) 的问题,显示 0x00000000 和 GetLastError 显示 0;
现在的主要问题是我做错了什么?
c++ - 在 C++ 中管理我的对象时内存分配的逻辑问题
我的功能设计有一些问题,我没有找到合适的解决方案(我是 C++ 的初学者)。
几天前,我问了另一个与此相关的问题。
所以,我有一个功能可以进行屏幕截图。它完美地工作。事实是我希望这个函数Image
从我实现的类中返回一个对象。
基本上,它是:
我的功能是这样的:
bitPointer
创建的usingCreateDIBSection
实际上是指向我的第一个像素值的指针(如果我理解得很好的话)。
然后,我可以使用一个简单的循环:
这是我的问题。
我必须hBitmap
通过调用来释放,DeleteObject(hBitmap)
否则我将没有更多的内存空间(循环最终崩溃)。
但是,我不知道在哪里做。
我想在我的函数中执行此操作,但如果我调用DeleteObject()
,那么它也会破坏我的bitPointer
,因此我将无法从Image
返回的对象中访问像素。事实上,我对我的bitPointer
变量是指针这一事实有点困惑。这意味着我不能复制它以防止它被破坏。我找不到解决方案。
我尝试过的两种解决方案:
- 创建一个调用
DeleteObject()
我的类的析构函数Image
。
它不起作用,因为析构函数是从函数调用的,而不仅仅是从我的循环内部调用的。 HBITMAP hBitmap
向我的 class添加一个属性Image
,并DeleteObject()
从我的循环内部调用。
这不是很方便,而且我必须声明一个新的 Image 对象,我不能像我写的循环那样匿名。
所以,我被卡住了,有人可以帮我吗?
visual-studio-2010 - 使用 HBitmap
我正在尝试将一些 HBITMAP 保存到一个数组中,并在以后显示它们。从 DC 创建 HBITMAP 是可行的,但是当我尝试显示保存的 HBITMAP 时,我似乎弄错了。这让我觉得我还没有真正理解 HTBIMAP 是如何存储在内存中的。我假设数据类型 HBITMAP 本质上是指向内存中对象的指针,这就是我所需要的,但也许还有更多?
这是一个示例代码:
因此,这个想法本质上是将 HBITMAP 指针推送到一个数组,然后通过将任何存储的图像选择到内存 DC 中然后将其复制到实际 DC 来显示任何存储的图像。这有什么问题?
我使用的是 VC++、Visual Studio 2010,没有 MFC。
编辑:
我又做了一些测试。为了调试,我尝试通过添加以下for
循环来显示所有存储的位图(位置偏移)SaveScreen
然后它会显示iNumBitMaps
图像的时间,但它始终是相同的图像(即我存储在 中的图像aBitMaps[0]
)。我确实在调试器中进行了验证,它aBitMaps
包含所有不同的指针。所以,不知何故,我认为我没有正确地将位图加载到内存 DC 中。
c++ - 从 HBITMAP 获取特定像素的 RGB 值
如何从 HBITMAP 中获取一个特定像素的 RGB 值?我尝试在 StackOverflow 上阅读类似的帖子,但没有一个真正适合这个问题。下面的代码似乎获得了 HBITMAP 中另一个位置(不是想要的位置)的 RGB 值。
编辑(使用 user1118321 的解决方案)
height-1 因为 y 从 0 而不是 1 开始。
c# - 除了使用 P/Invoke 之外,如何在 hBitmap 上调用 DeleteObject()?
我正在处理类似这样的代码(从这里)
并且 MSDN 说,每当我打电话时,Bitmap.GetHbitmap()
我都必须调用DeleteObject()
以hBitmap
释放非托管资源。
我见过的所有答案和 MSDN 都说我必须 P/Invoke 该DeleteObject()
功能。这看起来有点疯狂,因为我获得了hBitmap
没有 P/Invoke,现在我突然需要使用 P/Invoke 来正确摆脱它。
除了 P/Invoke 确实没有其他方法可以DeleteObject()
调用我的hBitmap
吗?
c++ - 如何在 C++ 中将文本添加到我的位图文件
使用下面的代码示例,我成功创建了一个 .bmp 文件,打开该文件时只显示一个灰色方块。现在我想在保存之前将文本添加到位图中。例如:绿色的“Hello World”应该显示在灰色方块的顶部。这里的stackoverflow帖子是我迄今为止发现的最接近的东西。不幸的是,我仍然无法弄清楚完整的实现。
请注意,我想避免使用任何第三方库。任何帮助将不胜感激,谢谢。
c++ - 转换矢量到 C++ 中的 HBITMAP
我已使用此处的代码将 PNG 图像加载到 BMP 原始矢量std::vector <unsigned char>
中。现在,我需要将此图像作为背景应用到 WinAPI 窗口,但我不知道如何将其转换为HBITMAP
. 也许有人以前做过,或者我可以使用另一种格式或变量类型
c++ - 如何在不使用 BitBlt 的情况下提取 HBITMAP 的一部分
我有一个 HBITMAP 对象。在不使用 BitBlt 的情况下,我想将它分成几部分并获得这些部分的位或新位图
我可以用 BitBlt 做到这一点,但它很慢。提取零件大约需要 50 毫秒。我考虑过从位图中提取字节数组的区域,但这似乎很困难。还有其他方法吗?
谢谢!
c++ - 将 jpeg 从 hBitmap 保存到 BYTE 数组
在此先感谢您的帮助 :)
在我的代码中,我从本地计算机加载位图,最终接收到 HBITMAP 结构。我想将此 hBitmap 转换为 JPEG 并将其发送到远程服务器端套接字。
到现在为止,我能做到的就是通过CImage功能将我的图片以jpg格式保存在磁盘上,然后通过网络发送。但是,我想干净利落地完成它,而不是在磁盘上写入临时文件。我的第一个想法是发送 JPEG 数据的字节数组,但我不知道该怎么做......有什么想法吗?
以下是我用来生成 JPEG 文件的代码片段。
非常感谢您的帮助。