问题标签 [bitblt]
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++ - C++ MFC:将位图绘制到 CFrame 中
我正在尝试将位图(存储为字节数组)绘制到窗口。
典型程序如下:
在 OnPaint() 处理程序中获取设备上下文。
从中创建兼容的设备上下文,
GetClientRect(&WinRect)
创建一个与客户区 ( )大小相同的兼容位图。
现在,如果窗口客户端的大小与位图的大小完全相同,我可以简单地调用以pNewBitmap->SetBitmapBits
将我的数组“输入”到位图中。
跟着这个,BitBlt
位图出现在窗口上。
如果您希望窗口大小独立于图像大小而变化,那么首先您必须确保pNewBitmap
大小正确(客户矩形),但现在您不能简单地将数组推入位图中。
在这种情况下,我通过重复上述过程找到了一个解决方案,以创建一个与图像精确大小的位图,这样我就可以将我的位“推入”其中,然后BitBlt
将其放入更大的、客户端大小的位图中,然后得到BitBlt
'ed到窗口。
还有另一种方法可以做到这一点吗?实际代码如下。
performance - 来自非常大的位图的Delphi慢速bitblt
我正在创建一个组件,其中可以通过拖放设计表格。
我设法编写了拖放部分和表格渲染,但是我遇到了问题。
我使用双缓冲来减少闪烁,方法是绘制到内存中的位图,然后将其中的一部分 bitblt 到屏幕上。
脚步:
- 将表格绘制到内存位图(这可能非常大,最多可达最大值)。
- 控制画布上的部分内存位图内容。
问题是,内存中的位图越大,bitblt 操作就越慢(显然)。
我的问题是:
- 如何提高这个性能?我也对替代解决方案感兴趣。
代码:
更新:
从代码和问题中删除了“三重缓冲”和 UpdateScrollBars。
c++ - MFC BitBlt 和 SetDIBits 与 SetBitmapBits
我有一个存储为 BGRA 字节数组的位图。这是我用来绘制位图的代码:
translatedImage
数组中像素的实际复制是这样发生的:
然后经过更多处理后,我将pDC->StretchBlt
其dispDC
作为源 CDC 调用。这在本地登录时工作正常,因为显示也设置为 32bpp。
一旦我使用远程桌面登录,显示将变为 16bpp,并且图像被破坏。罪魁祸首是SetBitmapBits
;即为了让它工作,我必须正确填写translatedImage
我想要显示的 16bpp 版本。我没有自己做,而是搜索了文档,发现SetDIBits
它听起来像我想要的:
SetDIBits 函数使用在指定 DIB 中找到的颜色数据设置兼容位图 (DDB) 中的像素。
在我的例子中,DIB 是 32bpp RGBA 数组,而 DDB 是dispBMP
我用CreateCompatibleBitmap
.
所以我没有打电话给SetBitmapBits
,这就是我所做的:
但是,r
始终为零,当然,我的窗口中除了黑色之外什么也没有。代码有什么问题?
vb.net - 从 VB.NET 保存 PNG 会弄乱阴影
我一直在尝试解决 .NET(所有版本)本身不支持 TRUE 透明度的古老问题,并且在阅读了数千篇文章、问题/答案、论坛、msdn 文章等之后,除了被能够通过使用整个表单来做到这一点,其中没有可见的控件(请参阅http://www.codeproject.com/Articles/1822/Per-Pixel-Alpha-Blend-in-C)
我已经部分放弃了这种搜索,而是决定通过使用 MDIParent/Client 情况来满足,其中每个图形/文本都直接绘制到表单上。
我遇到的问题是,当我保存透明度时,我最终会在任何阴影周围出现一个斑点,我认为(但不确定)是 PNG 正在以较低的分辨率保存或 alpha 通道丢失或者其他东西,MakeTransparent(Insert Color Here),就是不满意。如果你能说明这个过程哪里出错了……请告诉我。
输入图像
输出图像
我正在使用的代码如下:
此外,您会注意到第一张图像中的字母在输出中没有被渲染为透明。
c++ - C++ Screen capture fail after hundreds repetitions on Windows: memory leak?
I use a function which captures a screen using the BitBlt
mehtod and can then return a HBITMAP
.
Here, the function only returns the first value of the pixels array.
Actually, it works fine.
But when I try to loop this, an error is generated after a few hundred rounds (a little over 900 for me), an Access violation reading location
error.
I also noticed that if I reduced the values of width
and height
, then the error took longer to be called.
I am a true beginner and I do not know where the error may come, but it would look like a memory problem, right?
c++ - CImage 对象的深拷贝导致调试断言失败
我有一个类似的问题:如何复制 CImage 对象? 我需要制作 CImage 对象的深层副本。具体问题是我通过 PostMessage 从辅助线程获取 CImage*,并希望将其复制到 CImage 对象,该对象是不同类的属性。
我目前有以下代码:
我怀疑 obrazek->GetDC() 和 obrazek->ReleaseDC() 有问题。当我有 obrazek->GetDC() 时我没有错误(但否则 obrazek->BitBlt(...); 上的调试断言失败),尽管我无法释放 obrazek 的 DC 和/或删除 obrazek 对象,我想这样做,因为如果我不这样做,我就会有内存泄漏。
所以总的来说,我不知道复制对象。
编辑:
另一个线程以下列方式处理 CImage:
此外,带有图像的 dll 中发生了什么:
c++ - SetPixel 和 BitBlt
我究竟做错了什么?我想在设备上下文中画一条黑线,然后用 C++ 将它传送到我的 MFC 应用程序:
screen-capture - windows media player 版本 12 的屏幕截图
我正在尝试捕获正在 Windows 7 中的 windows 媒体播放器(版本 12)中播放的视频。Bitblt 方法返回视频的黑屏,而所有其他窗口(媒体控件、播放列表等)都已成功捕获。所以我浏览了这个问题。常见的答案之一是禁用播放器中的视频覆盖。我没有在 wmplayer 中找到任何可用的覆盖选项。我也未选中
“为 wmv 文件打开 DirectX 视频加速”
选项。然后,我只得到黑屏。有什么方法可以在 windows7 的 wmplayer 中捕获视频内容?
c++ - 最快的 RGB 颜色检测 C++
嗨,我使用了 getpixel 方法、bitblt 或它所谓的(创建位图标题),然后遍历所有值。这是非常缓慢的。例如,如果我必须检测红色或特定颜色的东西,则需要很长时间。一定有更快的方法吧?我确实尝试使用桌面作为 HWND,然后使用我需要查找颜色的窗口,但桌面速度更快.. 猜测是因为它必须寻找我猜的窗口。我使用这两种方法都得到了很高的 cpu 使用率。
python - 我可以在没有显示器的情况下在 Windows 机器上截屏吗?
我有一组可以远程访问的虚拟机(运行 Windows)。因此,这些机器都没有连接监视器,它们只能由远程桌面访问。
我想获取在桌面上运行的应用程序的屏幕截图。我发现如果我没有通过远程桌面连接,那么屏幕不会呈现并且我无法捕获屏幕(我管理的最好的方法是获得黑色图像)。
有什么方法可以强制桌面为了我的屏幕抓取而呈现?
编辑:好的,更具体地说,这里是一些 Python 代码,如果我被远程连接到机器中,它会截取屏幕截图:
如果我在远程时运行它,它工作正常。一旦我没有被远程控制,我就会收到以下错误:
win32ui.error:BitBlt 失败
此错误是由于没有人远程进入时屏幕未呈现的结果。
我需要一个解决方案,当我没有通过远程桌面连接时,我可以在这种情况下获取屏幕截图。
编辑2:要清楚,代码在VM本身上运行。但是当没有人远程进入机器时它正在运行。