C++ (Qt)void DistortImageSine( QImage & ing, qreal amount, // амплитуда искажения в пикселях qreal phase = 0.0, // фаза qreal freq = 1.0 ) // частота { for (int i = 0; i < img.height(); ++i) { qreal shift = sin(PI * 2.0 * (qreal(i) / img.height() * freq + phase)) * amount; ShiftLine((int *) img.scanLine(i), img.width(), int(shift)); }} void ShiftLine( int * data, int size, int shift ){ if (shift > 0) { // сдвиг вправо shift = qMin(shift, size); memmove(data + shift, data, sizeof(int) * (size - shift)); } else { // сдвиг влево shift = qMax(shift, -size); memmove(data, data - shift, sizeof(int) * (size + shift)); }}