Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将10位强度移动到16位像素的顶部?_C#_.net - Fatal编程技术网

C# 如何将10位强度移动到16位像素的顶部?

C# 如何将10位强度移动到16位像素的顶部?,c#,.net,C#,.net,我有一个10位强度值的UInt16[10001000]数组,我希望将其从位0-9向上移动六位到位6-15。做这件事的快速方法是什么?如果使用指针直接访问,则使用32位或64位整数并对其进行移位。应该给出相同的结果,但我希望它会快一点(因子2左右)。另一个加速应该来自避免复杂的索引逻辑访问2D数组 大概是这样的: fixed(UInt16* p0=&arr) { UInt32* p=(UInt32*)p0; UInt32* p_end=p+1000*1000/(sizeof

我有一个10位强度值的
UInt16[10001000]
数组,我希望将其从位0-9向上移动六位到位6-15。做这件事的快速方法是什么?如果使用指针直接访问,则使用32位或64位整数并对其进行移位。应该给出相同的结果,但我希望它会快一点(因子2左右)。另一个加速应该来自避免复杂的索引逻辑访问2D数组

大概是这样的:

fixed(UInt16* p0=&arr)
{
    UInt32* p=(UInt32*)p0;
    UInt32* p_end=p+1000*1000/(sizeof(UInt32)/sizeof(UInt16));
    while(p!=p_end)
    {
        *p = *p << 6;
    }
}
fixed(UInt16*p0=&arr)
{
UInt32*p=(UInt32*)p0;
UInt32*p_end=p+1000*1000/(sizeof(UInt32)/sizeof(UInt16));
while(p!=p_end)
{

*p=*p无论您使用什么解决方案,都可以通过使用多个线程来加快速度。只是不要锁定同一个对象,以某种方式将数据分开。

谢谢。我希望有一些本机代码库函数可以提供2倍以上的速度。@ChrisJJ它快了多少?系数2只是保守估计。