for (int y=pocz;y<kon;y++)
{
for (int x = 0; x < obrazekKopia.Width; x++)
{
if (((wskWejsciowy[0] + wskWejsciowy[1] + wskWejsciowy[2])/3 < 128))
{
wskWyjsciowy[0] = wskWyjsciowy[1] = wskWyjsciowy[2] = 0;
}
else
{
wskWyjsciowy[0] = wskWyjsciowy[1] = wskWyjsciowy[2] = 255;
}
wskWejsciowy += 3;
wskWyjsciowy += 3;
}
wskWejsciowy += nOffset;
wskWyjsciowy += nOffset;
}
}
我上学的任务是将它划分给线程。程序将单色图像转换为B&amp; W. 线程数必须“按用户需要”。我尝试了很多东西,我不能自己做。这是我的第一个C#程序,请帮帮我!
你问我做了什么:
Thread1 []tab = new Thread1[liczbaWatkow];
ThreadStart[] pts = new ThreadStart[liczbaWatkow];
Thread[] t = new Thread[liczbaWatkow];
for (int s = 0; s < liczbaWatkow; s++)
{
pts[s] = delegate
{
tab[s] = new Thread1();
tab[s].wykonaj(prog, obrazekKopia, wskWejsciowy, wskWyjsciowy, pocz, kon, nOffset);
};
pocz += obrazekKopia.Height / liczbaWatkow;
kon += obrazekKopia.Height / liczbaWatkow;
t[s] = new Thread(pts[s]);
}
for (int i = 0; i < liczbaWatkow; i++)
{
t[i].Start();
}
public class Thread1
{
public Thread1() { }
public unsafe void wykonaj(int prog, Bitmap obrazekKopia, byte* wskWejsciowy, byte* wskWyjsciowy, int pocz, int kon, int nOffset)
{
int prog2 = prog * 3;
unsafe
{
for (int y = pocz; y < kon; y++)
{
for (int x = 0; x < obrazekKopia.Width; x++)
{
if (((wskWejsciowy[0] + wskWejsciowy[1] + wskWejsciowy[2]) < prog2))
{
wskWyjsciowy[0] = wskWyjsciowy[1] = wskWyjsciowy[2] = 0;
}
else
{
wskWyjsciowy[0] = wskWyjsciowy[1] = wskWyjsciowy[2] = 255;
}
wskWejsciowy += 3;
wskWyjsciowy += 3;
}
wskWejsciowy += nOffset;
wskWyjsciowy += nOffset;
}
}
}
我不是一个懒惰的人,希望你解决问题
答案 0 :(得分:0)
很抱歉,使用神秘的词汇阅读代码有点困难,我猜测,波兰语或捷克语。
其中一个解决方案是将图像分成几部分,并将您在代码段中显示的算法应用于每个部分。这归结为将阵列分成几部分。所以,如果你有一个300像素和3个线程的数组,每个线程将获得他自己的100个像素,这将变成黑色和白色。之后,您可以再将这三个单色阵列加入其中。
我可以给你代码,但我认为这对你没用。相反,我只是为您提供相应文档的参考:http://msdn.microsoft.com/en-us/library/aa645740(v=vs.71).aspx
编辑:
你没有编辑过你的问题我可以帮助你更多。您正在将完整的位图传递给您的线程。相反,你应该只传递它的第N部分,其中N是线程的数量,而不是你已经在做的事情。
答案 1 :(得分:0)
你有一个循环为所有线程调用Start
。您还必须有一个为所有线程调用Join
的循环,以便您可以等待线程完成。完成所有线程后,您可以使用线程生成的数据。