Mam jeszcze jeden problem.
Otóż mam fragment kodu przetwarzający obraz.
Kopiuj
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
imagePointer1[0] = tabValue[imagePointer1[0]];
imagePointer1[1] = tabValue[imagePointer1[1]];
imagePointer1[2] = tabValue[imagePointer1[2]];
imagePointer1 += 4;
}
imagePointer1 += strideBuff;
}
imagePointer to wskaźnik na piksel.
tabValue to tablica, przechowująca wyniki dla wszystkich liczb jakie są możliwe (od 0 do 256) inaczej zwana tablicą LUT.
kanał alpha został zakomentowany, gdyż nie bierze on udziału w operacji.
wskaźnik jest przesuwany o wartość 4, gdyż działamy na obrazie z 32 bitami na piksel (mimo, że nie korzystamy z kanału alpha)
zakomentowany fragment: *(p + imagePointer1[0]); to przykład zapisania tego samego w inny sposób. p to wskaźnik na elementy tablicy LUT (p zawsze wskazuje na pierwszy element i dodajemy do tego wartość do przesunięcia).
Niestety kod działa... dobrze, ale dobrze mnie nie zadowala.
Konkretnie program uzyskuje szybkość około 200 milisekund na obrazie 5000x3750 pikseli.
To jest ok, ale chciałbym uzyskać około 50 milisekund, no najwyżej 120.
W jaki sposób mógłbym przyśpieszyć ten fragment kodu?
Zaznaczam, iż tabValue jest trzymana na stosie dzięki stackalloc, więc to już jest zoptymalizowane.
Dostęp do pikseli to około 100 milisekund a zapis na piksel to również około 100 milisekund.
Właściwie te dwa fragmenty kodu są najbardziej obciążające.
Czy da się jakoś dostać szybciej do pikseli oraz do elementów tablicy LUT tak, aby ten proces przyśpieszyć?
int* p = stackalloc int[100];
i już.