Один из самых простых алгоритмов масштабирования - это ближайший сосед.Предположим, вы масштабируете изображение из массива размером x1 y1 в другой размер x2 y2.Идея состоит в том, чтобы найти ближайшее целочисленное смещение в исходном массиве к каждой позиции целевого массива.Так что ваш алгоритм масштабирования заканчивается примерно так:
const int x1 = 512;
const int y1 = 512;
const int x2 = 64;
const int y2 = 64;
unsigned char orig[x1*y1]; /* Original byte array */
unsigned char target[x2*y2] /* Target byte array */
for(int i=0;i<x2;i++)
{
for(int j=0;j<y2;j++)
{
xoff = (i*x2)/x1;
yoff = (j*y2)/y1;
target[i+j*x2] = orig[xoff+yoff*x1]
}
}
Это даст блочное изображение с измененным размером.Для лучших результатов вы можете использовать усредненные или любые другие более интересные интерполяторы на основе полиномов.