Большинство современных CMOS-камер могут создавать 12-битные изображения. Каким будет быстрый способ преобразования массива данных изображения с 12 бит на 16 бит, чтобы обработка была возможна? Фактическая проблема заключается в заполнении каждого 12-битного числа с 4 нулями, можно предположить, что может быть принят маленький endian, также приемлемо SSE2/SSE3/SS4.
Добавлен код:
int* imagePtr = (int*)Image.data;
fixed (float* imageData = img.Data)
{
float* imagePointer = imageData;
for (int t = 0; t < total; t++)
{
int i1 = *imagePtr;
imagePtr = (int*)((ushort*)imagePtr + 1);
int i2 = *imagePtr;
imagePtr = (int*)((ushort*)imagePtr + 2);
*imagePointer = (float)(((i1 << 4) & 0x00000FF0) | ((i1 >> 8) & 0x0000000F));
imagePointer++;
*imagePointer = (float)((i1 >> 12) & 0x00000FFF);
imagePointer++;
*imagePointer = (float)(((i2 >> 4) & 0x00000FF0) | ((i2 >> 12) & 0x0000000F));
imagePointer++;
*imagePointer = (float)((i2 >> 20) & 0x00000FFF);
imagePointer++;
}
}