Дан массив данных canvas.data (RGBA) размера canvas.size выровненный по 16 байтам и таблица LUT из 256 байт-элементов
Необходимо максимально быстро заменить значения RGB (A не имеет значения) данными из таблицы по принципу
Code: Select all
NewR := Table[R];
NewG := Table[G];
NewB := Table[B];
Code: Select all
Canvas.ApplyLUT:
mov ebx, LUT
mov edx, [canvas.data]
mov ecx, [canvas.size]
shr ecx, 2 ; ecx = size / 4
@@:
mov eax, [edx]
xlatb
ror eax, 8
xlatb
ror eax, 8
xlatb
ror eax, 16
mov [edx], eax
add edx, 4
dec ecx
jnz @b
ret