Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Написать текст волной


Автор: Andrey44 12.12.2008, 10:54
user posted image
Вот собственно на картинке вопрос

Автор: Pulse69 13.12.2008, 02:36
Полагаю, тут производится отрисовка части строки, трансформация матрицы, и так далее. http://www.bobpowell.net/angletext.htm Он для .NET, но GDI+ в Natvie API вполне доступен, и методы практически те же.

Автор: jonie 13.12.2008, 17:21
а по-моему обычный sin(x)*scale и всё. расчитать координаты по этой формуле не составляет труда, как, собстенно и вывести.

Автор: Lazin 13.12.2008, 17:35
Здесь ничего сложного, просто выводи по одному символу и расчитывай координаты для каждого из них поотдельности.

Автор: Andrey44 15.12.2008, 09:54
Всем спасибо за мысли.
Что-то буду пробовать. smile 

Автор: Dem_max 15.12.2008, 13:52
да там походу картинка правленая в фотошопе, ловкость рук и никакого мошенства.

Автор: Andrey44 15.12.2008, 15:05
Dem_max, не понял, какая картинка правлена в фотошопе? smile 

Автор: dizzy1984 15.12.2008, 15:57
Картинка с текстом "Nero Burning ROM - Stian Aagedal, Emanuil Achim, Sergiy Artemenko, Thorsten Aust, Nenal Babaj " изменена в фотошопе с помощью фильтра "Волна", затем добавлена к общей картинке "Nero Express 8". 
Если конечно там слова не перемещаются, тогда это отрисовка в реальном времени 

Автор: Dem_max 16.12.2008, 05:18
А картинка поди лежит в ресурсах exe или dll. Лично я бы поступил таким образом.

Автор: Andrey44 16.12.2008, 08:10
dizzy1984, 
Dem_max, 
Это не фотошоп, так как я сам делал картинку. Слова перемещаются волной, потом еще могут змейкой, еще волной со змейкой.
Запустите неро и посмотрите.

Автор: dizzy1984 16.12.2008, 12:12
У меня нет неро, но по картинке вроде ясно.
Код

CPaintDC dc( this );

CRect cr;
GetClientRect( cr );
for ( double x = cr.left; x < cr.right; x += 10 )
{
     double y = 30 + 15 * sin ( 0.07 * x );
     dc.TextOut ( static_cast<int>( x ), static_cast<int>( y ), _T( "A" ), sizeof( TCHAR ) );
     //dc.SetPixel( static_cast<int>( x ), static_cast<int>( y ), RGB( 0, 0, 0 ) );
}

Когда-то делал подобное чтобы побаловаться.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)