问题标签 [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.

0 投票
1 回答
1814 浏览

c - 以最快的方式在鼠标位置获取像素颜色

所以实际上我在这里从“Vodemki”获得了一个非常快速和漂亮的代码 - 以 最快的方式获取像素颜色?

但唯一的问题是它扫描整个图像,而我只需要扫描我当前的鼠标位置

这是代码 -

我不熟悉BitBlt,所以如果有人可以帮助我修改该代码,我将不胜感激

谢谢!

0 投票
0 回答
763 浏览

c++ - 有没有没有缓慢的bitblt替代品?

最近我注意到 bitblt 非常慢(一张图像大约需要 33 毫秒),我知道这并不是我的硬件太慢,因为它以大约 50 fps 的速度运行具有良好图形的游戏。那么,我可以使用哪些替代 bitblt 来实现相同的结果?

我正在运行 Windows XP

这是我正在使用的代码:

0 投票
1 回答
1137 浏览

c - 来自directx 应用程序的Bitblt

我得到了从当前鼠标位置获取像素颜色的代码。
它运作良好,但唯一的问题是,我无法从 d3d 应用程序中获取它......
我尝试了几次,但它只得到黑色 -

红色:0
绿色:0
蓝色:0

这是我的代码 -

谢谢!

0 投票
1 回答
547 浏览

c++ - Blitting Windows 放大镜的内容

我的 Windows 程序使用 GetDC 然后 BitBlt 复制 Windows 的内容。这适用于大多数窗口,但使用放大镜窗口时我会得到一个空白屏幕。无论是我使用 Magnification API 自己创建的放大镜还是内置的 Windows 7 放大镜,都会发生这种情况。

这种行为是设计使然,是否有解决方法?

0 投票
1 回答
648 浏览

winapi - 使用 BitBlt 在图片背景上滚动文本

我的用户控件旨在作为平滑的垂直文本滚动器运行。它只将文本(要滚动)渲染到控件的表面一次,使用TextRenderer.DrawText. 然后它启动一个计时器,在它的每个滴答声中,Bit-Blits ( BitBlt) 整个客户端矩形向上一个像素。控件的设备上下文既是操作的源又是目标BitBlt,如下:

这成功地实现了所需的滚动效果,但前提是我的控件的背景是纯色(例如Me.BackColor = Color.Gray)。

如果我将图片设置为控件的背景BitBlt则将背景与显示在其上的文本一起滚动。当然,我只想滚动文本,而背景图像保持静止。

我找到了以下线程,它建议使用TransparentBlt而不是BitBlt背景是要忽略的纯色统一颜色:如何使用 BitBlt 复制?

建议的解决方案不适合手头的情况,其中使用了彩色背景。

请注意文本本身是纯色的。

您的建议将不胜感激。如果有任何问题,我正在使用 VB.NET 2005

0 投票
1 回答
402 浏览

.net - TransparentBlt 产生不清晰的图像

我正在使用该方法将文本(使用TextRenderer.DrawText)渲染到一个位图上,该位图是背景色纯白色(Color.WhiteFillRectangle。然后我将TransparentBlt这个 Bitmap 放到一个包含彩色背景图片的内存 DC 上,使用Color.White And &HFFFFFF透明颜色的 RGB 值(crTransparent参数),如下所示:

{然后我BitBlt将组合图像放到我的控件表面上,但这不是那么相关}

尽管呈现的文本清晰清晰,但其TransparentBlt结果并不清晰。

这是文本的快照,呈现在白色背景上(这是图像而不是键入的文本):

在此处输入图像描述

这是在彩色背景上对上面的图像进行 Trans-Blitting 的结果:

在此处输入图像描述

请注意,白色(透明)点仍在红色文本周围。

此外,请注意在图像左侧绘制的白色垂直线,以及在右上角绘制的类似较短的水平线。

我正在使用 VB.NET 2005(又名 VB8)。您的建议将不胜感激。

0 投票
1 回答
4263 浏览

delphi - BitBlt Printer.Canvas 到 TBitMap 显示为纯白色

我正在尝试使用 BitBlt 将 Printer.Canvas 捕获为位图。然后我想获取该位图并将其显示在油漆盒上。但是,当我尝试这样做时,我只会得到一个与我为 Bitmap.SetSize 输入的值成比例的白色矩形。我的打印输出看起来是正确的,所以我几乎可以肯定打印机的画布​​正在正确绘制。我尝试了以下代码,使用变量位图作为目标,油漆箱作为源(本质上,我正在向油漆箱绘制一个简单的矩形和一行文本,将其位图位图,清除它,然后发布它回到paintbox),但现在Printer.Canvas.Handle 是它不显示的源。

我知道屏幕和打印机之间的尺寸不同,所以我会清楚地指出尺寸,以防我做错了。

我希望画布也会被写入,画布将被复制到位图,然后可以在画框上绘制。然而,我看到的只是一个白色矩形。我将位图的尺寸设置为整个画框,而不是打印机的整个画布。我这样做是因为如果我理解正确,我应该只在打印机画布的 TopLeft 0,0 和 BottomRight 300,300 之间绘制,就像在我的油漆盒上一样。如果我直接对 Paintbox 执行此操作,我希望看到相同的结果。

任何帮助将不胜感激。提前致谢。

鉴于我收到的评论,我试图做的似乎是不可能的。我想做的是写入打印机画布,然后获取该画布的图像数据并将其存储在位图中。由于无法使用 BitBlt 有没有办法做我想做的事?我认为不是,因为有人告诉我 Printer.Canvas 无法读取。在这一点上,我已经找到了解决方法,但我只是好奇。

0 投票
1 回答
4263 浏览

c# - 使用BitBlt截屏,如何?

我在搜索中不时遇到这个“BitBlt”,但我不知道如何使用它。

从人们的说法来看,这似乎是捕获 Windows 显示的屏幕的最快方式。但是,我自己不能说什么,因为我没有得到它的工作。

我唯一设法至少尝试的方法是:

我猜哪个使用它?(rc.size = 某个窗口的大小) 可悲的是,它没有做任何事情,我得到一张黑色的图片。但是,如果我使用 SourceCopy,它可以工作,但这是正常方法。

我目前正在尝试替换一些代码以使用 BltBit,但它也不能很好地工作:

0 投票
1 回答
2729 浏览

winapi - 如何在 win32 C++ 编程中执行 BitBlt() 复制包含 Windows Media Player 的屏幕区域?

我有一个程序可以通过BitBlt. 我今天测试它,发现当屏幕区域包含 Windows Media Player 的部分时,这些部分是灰色的。该区域的其余部分成功复制到位图。

这是我用来捕获屏幕的一部分的代码片段:

此代码片段从屏幕点 (100, 100) 开始捕获尺寸为 800x600 的屏幕区域。

我把播放电影的媒体播放器放在这个区域的某个地方,当我进入输出位图时,它是一个灰色区域,而不是电影播放器​​的内容。

我想知道如果BitBlt它包含电影播放器​​,是否有可能是一个屏幕区域?是因为媒体播放器在屏幕上显示的内容与其他 Windows 应用程序不同吗?

0 投票
1 回答
1389 浏览

c# - 通过屏幕截图分析检测游戏黑客C#

我正在尝试编写一些代码来检测游戏的壁挂。基本上,存在一些创建 windows aero 透明窗口的 hack,他们将 hack 绘制到这个外部窗口上,因此无法通过截取游戏本身的屏幕截图来检测它。

我目前的做法是 - 1. 截取游戏窗口的屏幕截图。2. 对相同坐标的windows桌面进行截图。3. 进行图像分析,比较截图1和截图2,看看是否有差异。

我的问题是屏幕截图 1 和屏幕截图 2 没有同时执行,因此可以在两个屏幕截图之间绘制新的游戏帧,从而在比较图像时导致误报。

我想知道是否有办法协调屏幕截图,以便它们同时发生?或者以某种方式停止屏幕绘制任何新帧,直到我的屏幕截图完成?

这是我用来截屏的代码。请注意,我什至尝试通过将两个工作项排队来并行截取 2 个屏幕截图。但是,即使这样也不会导致屏幕截图同时发生。所以我想知道是否有某种方法可以停止从显卡对屏幕的任何进一步更新,直到我的屏幕截图完成?或者任何其他方式我可以做到这一点?