Возможно, я неправильно понял вопрос, но: у вас есть два массива int и массив масок одинакового размера, который применяет соответствующую маску к обоим массивам изображений.Где бит в массиве маски равен 0, вы выбираете бит из A;когда 1, вы выбираете бит из b.
Так, если, например, у вас были значения в первом элементе массива:
a[0] : 0000 1111
b[0] : 0011 0011
mask[0] : 0101 0101
Тогда конечный результат будет:
dest[i] : 0001 1011
Это может быть выражено как:
dest[i] = (a[i] AND (NOT MASK[i]))
OR
(b[i] AND MASK[i])
Или в C #:
dest[i] = (a[i] & ~mask[i]) | (b[i] & mask[i]);
Если это намерение, то вы можете просто запустить как цикл:
for (int i = 0; i < len; i++)
{
dest[i] = (a[i] & ~mask[i]) | (b[i] & mask[i]);
}
Наконец, с точки зрения производительности, одно замечание: вы упомянули о создании нового массива для хранения целевого изображения.Если изображения имеют значительный размер, постоянное создание больших массивов может стать узким местом.Вместо этого, если возможно, создайте целевой массив один раз и используйте его по мере необходимости.Кроме того, если вам нужно выделить большое количество байтовых массивов для временного использования (например, внутри метода), вы можете рассмотреть возможность использования оператора stackalloc для выделения пространства в стеке, что может быть более эффективным, чем создание новых управляемых массивов..