【发布时间】:2015-03-13 00:01:39
【问题描述】:
我编写了一个 VB .Net 程序,可以对图形文件进行选择性强度像素修改。它比我开始时快得多(20 秒对 90 秒),但处理多个图像的总时间仍然很慢。我通常运行 64 个 12 MP 图像,处理它们大约需要 24 分钟。我认为如果我使用多个线程,每个线程处理整个图像集的一个子集,我可以加快速度,所以我添加了多个后台工作人员。但是当我使用 Thread#.RunWorkerAsync() 从程序中运行多个线程时,保存的图像就搞砸了。这是一个“好”的图像,在一个线程中运行:
http://freegeographytools.com/good.jpg
下面是两个线程运行时相同图像的典型示例:
http://freegeographytools.com/bad.jpg
这些结果基本上是典型的,但“坏”图像在底部附近有一条干净的条纹,看起来是正确的;通常不会出现在大多数图像上。 每个线程调用自己的带有独立变量的子程序,所以不应该有变量“交叉污染”。虽然这些结果是使用保存为 JPG 的图像获得的,但我使用保存为 TIF 文件的图像获得了相同的结果。我还尝试将图像分离到不同的目录中,并同时处理每个目录,每个目录都有自己的线程 - 结果相同。为了修改像素,我使用了 GetPixel/SetPixel 来更改像素值,并且还使用 LockBits 来修改字节数组中的图像 - 这两种方法的结果是相同的。一个线程好,两个线程坏。我确定这很明显,但我无法弄清楚。建议将不胜感激。
【问题讨论】:
-
您需要发布多线程案例的相关代码才能获得好的答案。
-
请提交您的代码,因为社区可以开始提出有关问题可能是什么的想法。
标签: .net vb.net multithreading image