问题标签 [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 投票
0 回答
375 浏览

c# - 字节数组中的图像差异c#

我正在尝试一种方法,该方法应该返回字节数组(rgb 值)中两个图像之间的差异并通过 UDP 发送。代码:(发送此数组无关紧要,因为现在无关紧要)

现在我有来自 2 个图像的 2 个字节数组,我只是比较它们,当图像不同时,我从所选图像写入足够的 RGB 值到差异 []。问题是,当两个图像中的 RGB 值相等时,此差异数组中的适当位置将填充 0(三个 0 表示白色)。所以问题是,如果我将这种差异[]“强加”到目标图像上,它可能主要是白色的。我真的很想使用 Marshal.Copy 和 Lockbits,因为它真的很有效。

问题是:如何存储此图像差异以避免在读取/强加它时乘以“for”循环?也许我错过了一些方法?我想继续使用 LockBits 和 Marshal.Copy,但如果您有更好的想法 - 请与我分享。

0 投票
2 回答
2069 浏览

c# - C# LockBitmap - xy 坐标到像素字节的转换

我正在尝试学习用于图像处理的 LockBitmap 类,并且遇到了下面发布的这段代码。基本上它返回 xy 坐标的颜色。

当然,这种方法只有在我执行source.LockBits()and Marshal.Copy()/之后才有效unsafe context

  1. 什么是cCount,为什么总是这样Depth / 8
  2. int i = ((y * Width) + x) * cCount,这是从 (x,y) 坐标转换为 的固定公式Pixels[i]吗?为什么?
0 投票
0 回答
124 浏览

c# - Bitmap.LockBits 中 ImageLockMode 的用途

我在 C# 中工作,我有一个关于 Bitmap.LockBits 方法的问题。假设我有一个名为 myBitmap 的位图并在此位图上使用 LockBits:

在我有限的理解中, bmpData.Scan0 是指向图像数据的指针,但这是“实际图像数据”还是某种副本(仅使用指定矩形中的数据)?我问的原因是我无法弄清楚 ImageLockMode 枚举的目的。在我看来,如果我有 Scan0 指针,我可以摆弄并对图像数据进行各种读/写(例如使用 Marshal.Copy),而不管选择的 ImageLockMode 是什么。

感谢您的时间!亲切的问候/亨利克

0 投票
0 回答
90 浏览

c# - Lockbits:数组序列在某处发生变异

我正在使用该lockbit方法来操作图像,但是我注意到在使用该类型的save方法保存图像后Bitmap,我在从锁位中获取的字节数组中操作的数据被操作。

例如假设以下方法:

当我尝试通过将数组中的所有值设置为 0 来测试它时,例如:

现在,当我使用相同的技术读回保存的图像时,我会在锁定位之外的获取的字节数组中看到 10、20 或其他奇怪的值。

我认为这不是正常行为,因为使用较慢的GetPixel方法时,我没有注意到这种突变。

0 投票
0 回答
169 浏览

vb.net - 实时 (30fps) 图像处理 vb.net

我不是在这里寻找任何代码!

我的问题相当简单:普通家用计算机是否可以使用 vb.net 运行 30 fps 1024x768 图像处理算法。

更多细节;1.我并不期待一个很难的肯定。我希望没有人能给我一个硬性的 NO(例如,这可能不是因为... lockbits 需要至少 0.5s 到...等所需的内存) 2. 我问所以我不如果这个想法存在根本缺陷,请不要在接下来的 3 周左右尝试实现这一目标。3.分辨率和FPS要求仅用于示例目的,fps的一半或两倍或分辨率不应该影响答案(据我所知)。4. 任何图像处理方法都是可以接受的。实际图像不会被编辑,但我需要读取 RGB 值(用于单独的并行算法)。

编辑请注意:我希望这个问题没有得到完美的答案,因为这意味着它是可能的。但是,如果有一个不可能的理由,那么这个问题就不是基于意见。只是想在结束投票开始之前说清楚!:D

0 投票
0 回答
90 浏览

c# - 使用 LockBits() 函数查找位图的偶数和奇数列和行

我使用第二个块代码来查找位图的偶数和奇数列,以便在位图中构建方格页面我使用了我的 IsEven() 和 IsOdd() 函数

我想用 lockbits 完成这项工作:

但是有一个问题,即 Checkered 页面绘制不正确,我使用 GetPixel() 和 SetPixel 进行了绘制,但我必须使用 LockBits,您能帮帮我吗?

这是我的代码:

0 投票
2 回答
438 浏览

c# - 使用通过 Bitmap.LockBits 函数访问的底层缓冲区在 C# 中处理位图

我需要对任意图像进行分析。我想从最简单的例子开始 - 只需将图像复制到图片框。

在我的程序的结果中,图像被扭曲 Original: original_image After: after_image。我究竟做错了什么?

0 投票
0 回答
43 浏览

vb.net - Vb.Net 2015 - 使用 lockbits/marshal.copy 的字节数组存储和比较问题

我是新来的,如果我的问题没有以正确的格式产生回复,请原谅我。如果我需要添加任何内容,请告诉我:

我目前正在家里为一家公司的同事做一个项目,该公司使用一个非常古老的遗留系统,将输出显示到屏幕上。他们拥有的系统已经过时,不再受支持(设置它的公司已经倒闭)。有人告诉我,他们需要为月度报告保留系统,但希望以更现代的方式显示其输出,这样当人们进来时,他们可以毫不尴尬地看到正在发生的事情。很难解释,但基本上我被要求从一个屏幕捕获信息并输出到另一个。

我大约完成了样本的 3/4,用 VB.Net 编写......并且发现图像比较对于使用 getpixel 进行比较所发生的变化来说太慢了。将图片保存到内存流进行比较(通过 x,y 寻找匹配)时,速度也是一个问题......所以我已经切换到 lockbits/marshal 复制到字节数组进行比较。基本上 - 显示在多个区域的数据总是与我保存的大约 20 张图像中的一张相匹配。我可以使用捕获和保存的图像比较图像(将差异放在现有保存的图像之上,输出被 100% 涂黑)。我知道我保存的图像与 g.fromimage 之前的比较方法 100% 匹配,但我使用的方法太慢了。现在我正在使用字节数组,

随着一个全新的项目打开,我已经复制了这个问题。在开始时将图像加载到图片框/始终不变 - g.copyfromscreen 到位图,然后存储到字节数组并导出到文本文件,一遍又一遍地完成是不同的。我无法弄清楚为什么会这样。这几乎就像我偶然发现了一个随机发生器哈哈。我比较的区域是 5x72,所以不是很大。现在为了简化,我将一张图片加载到一个像素盒中,然后单击一个按钮将该图片中的数据存储到一个字节数组中。然后我将图片的一个区域保存为 .png 并将同一区域的字节数组文本转换为文本文件。一遍又一遍地单击按钮会产生不同的字节数组到文本输出,但 png 文件匹配 100%。我不会移动图像,我

使用上面的代码,图片在窗体的加载事件中被加载到屏幕上设定位置的图片框中。我期望发生的是每次单击按钮都会产生相同的输出(字节数组与上次单击的字节数组匹配),因为屏幕上的图像根本没有改变。不是这种情况。

每次单击按钮时,我的图像输出(文件保存为 png)都匹配。输出到文本的字节数组不匹配。有时会找到块 1,有时会找到块 2-4(屏幕上看不到块 1),有时根本没有……这是屏幕上的静态图像,我正在从中抓取并与之进行比较-这应该并非如此。每次都应该在相同的位置找到块 1,并且每次都应该相同的字节数组。

0 投票
1 回答
72 浏览

c# - 启动新线程时如何停止线程?

我正在改进我创建的 3d 引擎的性能,引入 LockBits 和并行处理。我有一个引擎类,它使用以下方法更新位图的结果:

代码按预期运行以生成图像,但当主程序要求它快速连续更新多次时失败,错误发生在bmp.UnlockBits(bitmapData)中,异常为“GDI+ 中的通用错误”

根据我从研究中收集到的信息,我想这是因为该方法在完成第一次之前第二次运行,因此试图解锁已经解锁的数据。

如果这是正确的,那么在创建新线程时如何中止正在运行的线程?最后一个电话永远是最重要的

0 投票
1 回答
24 浏览

c# - efficiently updating an image? (visual c#)

Im writing a program that requires a lot of updates to be made to a 1400 x 900 pixel image (approx every second or so). In my current build i have used a lockbits function which recalls data from an array (which i have used to store data about each pixel on the map) and places the correct pixels on the bitmap.

full code

sample because it wont let me post otherwise

My issue is that once there is a large amount of colours on the bitmap, it can take a lot of time for the map to be updated, causing the entire run time to increase too much (late in run time i found it could take five seconds to update the image).

Is there any problems with my current algorithm that might be causing this issue? or is there any more suitable/efficient algorithms i could use instead?

Apologies if this isnt an appropriate question for here, but im stumped on how to do this, and im fairly sure its possible. Thank you <3