问题标签 [lockbits]

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 回答
501 浏览

vb.net - 这个数组中存储的 RGB 值在哪里?

我一直在创建的控件中使用以下子控件,以便更快地修改位图中的像素:

所有这些都有效,稍后当我在操作后检索实际图像时,它也可以正常工作。问题在于设置那些实际像素。

这个数组是什么?我知道它充满了Integers但每个指数代表什么?一开始我以为是这样设置的:

Array-> [R of Pixel 0,0][G of Pixel 0,0][B of Pixel 0,0][R of Pixel 2,0][G of Pixel 2,0][B of Pixel 2,0 ]

然而,这似乎并不正确。

0 投票
1 回答
1174 浏览

vb.net - VB.Net - Lockbits - 大于/小于函数

以下代码适用于我正在做的事情。但是,它需要的时间比我需要的要长。问题是它迭代每个大于/小于函数,这需要时间。我已经进行了一些研究,但无法弄清楚如何将其全部缩小以使其运行得更快。

像素 RGB 值必须经过以下测试- (1) 如果一个值大于 250,则其他值必须小于 5 (2) 如果一个值小于 5,则其他值必须大于 250 (3) 如果一个值等于 0,其他值必须大于 0 (4) 任何 2 个值之间的差必须小于 15(或我设置的任何其他阈值) (5) 看两个值是否等于 0

另外,在每个这些功能之后执行“退出”会有所帮助吗?

0 投票
1 回答
347 浏览

.net - 使用 LockBits(DirectShow 网络摄像头)损坏内存

我正在.NET (VB 2010) 中进行一些图像处理。我正在使用以下代码(它还没有做任何事情):

这非常适合简单的目的(例如,使图像变亮),但我的算法需要一些大变量(参见上面的“foo”)。声明它时(取消注释该行),我突然得到例外:
取决于'foo'的大小......

...第一个 Marshal.Copy() 抛出
AccessViolationException: Attempted to read or write protected memory。这通常表明其他内存已损坏。

...或“字节”的声明抛出
FatalExecutionEngineError:运行时遇到致命错误。错误地址位于线程 0x3690 上的 0x6819d142。错误代码为 0xc0000005。此错误可能是 CLR 中的错​​误或用户代码的不安全或不可验证部分中的错误。此错误的常见来源包括 COM 互操作或 PInvoke 的用户封送错误,这可能会损坏堆栈。

...或者根本没有例外,一切正常。

到底是怎么回事?

附加信息:我使用 DirectShow 从网络摄像头获取图像对象。

0 投票
1 回答
1055 浏览

vb.net - 两个图像之间的图像识别 vb.net Lockbits

我正在使用 Pixel 在大图像和小图像之间进行搜索。我让那个成功工作,但在让 lockbits 版本做我想做的事情时遇到了麻烦。

拳头我想遍历大图像,在其中找到较小图像的第一个像素。然后一旦找到第一个像素来做一个数学方程,告诉我它得到了多少准确率。这样做时,如果它符合将我的鼠标移动到屏幕上大图像内那个小图像的第一个像素(最左上角)的那个位置的标准。与 GetPixel 格式相比,它的成功率很高,而且速度极快。

问题无法在大图像上获取小图像的起始像素所在的位置并将鼠标移动到该位置。下面是代码:

发现: mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0) Catch End Try

现在,如果我能弄清楚如何让鼠标在屏幕上移动,那么我就会明白了。不幸的是,我已经为此工作了几天,但没有任何成功。如果您能提供帮助,我将不胜感激。先感谢您。

0 投票
1 回答
192 浏览

c# - Lockbits 不会影响我的形象

我正在构建一个 3d(红色,青色)程序。进展顺利,但在组合时,“图像”(见代码)似乎没有受到影响。

我的错误是什么?

认为:

CImageRImage位于代码下方。图像结果是全黑透明图像。对于测试和调试,我注释了Alpha(结果是一样的)。

图像:

影音 图像

0 投票
1 回答
3424 浏览

c# - .Net 使用 Lockbits 从位图中获取 RGB 值

我正在使用下面的代码从图像中提取 RGB 值,有时这可行,但是在某些文件上(似乎步幅不能被位图的宽度整除)它返回混合值:

对结果颜色进行分组后,值类似于:

或者一些变体,当它们应该是:

请指出正确的方向,顺便说一句,我的源 bmp 也在 PixelFormat.Format24bppRgb 中,所以我不认为这是问题所在。此外,如果您只能用 C# 回答,那也不是问题。

0 投票
1 回答
845 浏览

c# - 使用 LockBits 访问像素数据时出现内存错误

使用下面的代码访问三个不同位图的像素数据时出现此错误:

尝试读取或写入受保护的内存。这通常表明其他内存已损坏。

C#代码:

使用调试器,我可以看到变量npixels= 921600,当错误发生时(for 循环)变量i= 691200。所以不确定问题出在哪里。如果我将像素格式更改为 32bppRgb,则没有问题,并且工作正常。只是不想使用 24bppRgb。有任何想法吗?谢谢。:)

0 投票
1 回答
559 浏览

c# - 是否需要使用 lockbits 进行修复?

我有一些代码出现错误“AccessViolationException 未被用户代码处理:尝试读取或写入受保护的内存......”

违规函数的精简版本如下:

错误发生在该行:

甚至替换为:

迭代变量在每次崩溃时都有不同的值,所以这让我相信外部函数正在修改y位图。xCanvas

如果这实际上是我的问题,有没有办法防止fastBackgroundCanvas被外部修改?我以为LockBits应该这样做...

如果这还不足以回答,这里有一些我已经尝试过:我添加了这一行

fastBackground Canvas如果或尺寸正在被其他函数修改,则退出 OnPaint 。

可以使用互斥锁来防止修改位图的函数fastBackgroundCanvas绘图同时运行(我认为它们必须如此)但我宁愿以另一种方式阻止它们,因为 Canvas 是公共的,我不想要要求将互斥锁从类中传递出去。

根据@usr 的建议,这个进一步精简的版本不会失败……一定是 PTD 错误。(程序员太笨了)即算术错误

0 投票
1 回答
1049 浏览

c# - 以这种方式使用锁定位复制位图区域是否安全(双关语)?

我想我找到了一种更快的方法来在 c# 中复制位图。(如果它有效,我确定我不是第一个,但我还没有在任何地方看到它。)

我能想到的最简单的方法是断言我的想法是基于什么的,如果没有人在其中提出漏洞,假设这个想法是合理的:

1)LockBits简单地将像素数据块从位图中复制到固定内存中进行编辑并复制回使用UnlockBits

2)使用LockBits不会影响复制的内存块,因此它应该对从中复制的图像没有影响。

3)由于您从不输入unsafe代码,因此应该没有损坏内存的风险。

我看到的可能漏洞:

1)如果PixelFormat两个位图的s不同,这种方法可能不会总是正确复制。但是,由于LockBits需要指定像素格式,因此似乎已处理。(如果是这样,那么在另外 99.9% 的时间里我们都没有切换像素格式!/EndSarcasm)

2)如果两个位图的步幅不匹配,则可能有问题(因为stride复制操作中是外部for循环的增量器。)此问题将限制复制到具有相等步幅的位图。

编辑:我认为断言#2 一定是错误的......我只是在稍后尝试访问通过 CopyMe 传递的位图时发现了一个错误。下面的解决方法,但我不确定它是否会留下一块固定的内存。(内存泄漏警报!)

0 投票
2 回答
1837 浏览

c# - Bitmap.LockBits 是否将位图“固定”到内存中?

我最近经常使用锁定位图,并且不断收到“试图访问无效内存”错误。这主要是因为位图已在内存中移动。有些人使用GCHandle.Alloc()在 CLR 中分配内存并将其固定。做Bitmap.LockBits()同样的事情吗?我不明白“锁定”内存和“固定”内存之间的区别。如果有的话,你能解释一下术语和区别吗?