Russian Qt Forum
Октябрь 01, 2024, 20:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: колебание буквы  (Прочитано 8723 раз)
BuRn
Гость
« : Май 28, 2012, 20:19 »

Здравствуйте. Требуется отрисовать определенные буквы в определенном месте, что подскажете , я так думаю создать объект буквы, только вот как ее колебать и отрисовать на форме понятия не имею. Натолкните на идею
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Май 28, 2012, 21:17 »

Так напечатали исходную букву(ы) в QImage - и там ее колебите сколько хотите  Улыбающийся
Записан
BuRn
Гость
« Ответ #2 : Май 28, 2012, 21:47 »

Так напечатали исходную букву(ы) в QImage - и там ее колебите сколько хотите  Улыбающийся
дык а как колебать QImage
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Май 29, 2012, 08:53 »

дык а как колебать QImage
Да как угодно, напр сдвинуть пиксели в каждой строке, смещение посчитать напр по sin. Или можно сжать-растянуть. Ну или вообще найти готовый набор эффектов (наверняка есть)
« Последнее редактирование: Май 29, 2012, 08:55 от Igors » Записан
Bepec
Гость
« Ответ #4 : Май 29, 2012, 09:10 »

Igors я верю в ваш опыт, но...

Думаю, Burn просит любой пример. Так как я тоже вас не совсем понимаю Улыбающийся

Я понимаю что надо сдвинуть строки влево. Как это сделать? Приведите пожалуйста пример Подмигивающий

PS не все работают с графикой, увы :/
Записан
alexis031182
Гость
« Ответ #5 : Май 29, 2012, 09:21 »

Может быть так?

QTransform QImage::trueMatrix ( const QTransform & matrix, int width, int height ) [static]
А далее уже можно изголяться
Записан
Bepec
Гость
« Ответ #6 : Май 29, 2012, 09:28 »

Кхм... я попросил пример использования работы с QImage.

Igors, помоему, имел в виду работу напрямую с QImage, без посредников. Или нет?

В любом случае - я примера просил. Допустим поколебать каждую 2 строку на сантиметр влево, а каждую 1  на сантиметр вправо.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Май 29, 2012, 09:53 »

"Колебание" - значит искажение буквы, это преобразование не описывается матрицей. Писал здесь, возможны ошибки
Код
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));
}
}
 
Ну и во времени меняете амплитуду и/или фазу
« Последнее редактирование: Май 29, 2012, 10:01 от Igors » Записан
Bepec
Гость
« Ответ #8 : Май 29, 2012, 10:06 »

Во во. Теперь мне на 100% непонятно, значит всё верно Веселый С графикой уж точно не дружу Подмигивающий

Спасибо за пример. Возможно когда-нибудь и разберусь  В замешательстве
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #9 : Май 29, 2012, 10:37 »

Я если чесно думал что будет работа с пикселями Улыбающийся А тут прям ....
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #10 : Май 29, 2012, 10:44 »

Если без анти-алиаса, то все очень просто. А вот с ним - не очень, ну будем надеяться до него дело не дойдет  Улыбающийся
Записан
Bepec
Гость
« Ответ #11 : Май 29, 2012, 10:51 »

Хочу с пикселями Веселый Покажите пожалуйста.

PS хоть и не пойму ничего, зато смогу с гордостью говорить - я видел как работать с пикселями Веселый
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #12 : Май 29, 2012, 10:56 »

Если чесно над алгоритмом еще не думал, но подозревал что работа будет проходить через QImage::setPixel() и QImage::pixel() . Попробую вечером ченить накидать, может получится чего )))
Записан
Bepec
Гость
« Ответ #13 : Май 29, 2012, 11:59 »

А не затратно будет? точнее не черезчур медленно?
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #14 : Май 29, 2012, 13:07 »

Ну вообще да, не быстро будет, ибо setPixel вроде как там что то преобразовывает. Тут я думаю будет зависеть от размера буквы, и частоты обновления.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.071 секунд. Запросов: 23.