[WinAPI, GDI] как быстро нарисовать повёрнутый эллипс?
Использовать Gdi+ в задаче можно?
Неа... Только стандартный WinAPI... для вынь98х например
Перед выводом поворачивай точки на заданный угол
Не покатит... Там будут дыры между пикселями...=(
А главное - такие фишки были ещё в прогах для вин3.1, значит там есть что-то быстрое...
Многоугольник большой сделай.
Да, это маза. Но может есть попроще выход? А то при увеличении его надо будет адаптивно увеличивать число рёбер...
Разве это проблема - увеличить число?
Мда, если это ЕДИНСТВЕННЫЙ выход... Придётся имплементить его ;0
Считай брезенхейма с шагом в два или три раза большим.
дальше аналогично брезенхейму
обобщается для любой выпуклой фигуры
у которого одна ось параллельна координатной, а вторая наклонена
можно попробовать запустить два брезенхама одновременно:
один рисует стандартный эллипс, другой идёт вдоль наклонной оси и затыкает дыры на границе
(скорее всего это будет выглядеть как некая поправка на каждом шаге уже существующего алгоритма)
Я всё думаю о скорости данного алгоритма... А не проще вызвать несколько раз рисование линии, чем каждый раз делать сет_пихель?.. Можно рекуррентно считать значения синусов-косинусов и отрисовывать линиями...
И вообще, спасибо за идеи... Если честно, были у меня страшные мысли связанные с двойным брезенхэмом, но я их живо отмёл - может быть медленно.
BOOL ModifyWorldTransform(
HDC hdc, CONST XFORM *lpXform, DWORD iMode );
SetWorldTransform( XFORM...)
и аналоги этой функции (см. мсдн за подробностями)
// в матрице XFORM задаешь поворт (см. мсдн за подробностями).
Тормозить это не будет (только главное перерисовывай не весь экран, а invalidaterect на изменившуюся область, тогда и не будет тормозить).
Кстати (не в тему gdi+ работает под 98 (только с прогой тогда gdiplus.dll достаточно распространять)
2
А трансформации матричные для hdc и в GDI были, это не есть нововведение GDI+.
Windows GDIВзято отсюда.
ModifyWorldTransform
The ModifyWorldTransform function changes the world transformation for a device context using the specified mode.
BOOL ModifyWorldTransform(
HDC hdc, // handle to device context
CONST XFORM *lpXform, // transformation data
DWORD iMode // modification mode
);
<---cut--->
equirements
Windows NT/2000/XP: Included in Windows NT 3.1 and later.
Windows 95/98/Me: Unsupported.
<---cut--->
Ведь GDI+ гарантированно работает под 98 (лично знаю, да и в msdn - щас уточнил - написано, что supported
Matrix::Rotate Method...
Minimum operating systems Windows 98/Me, Windows XP, Windows 2000, Windows NT 4.0 SP6
правда, челу только GDI почему-то требуется использовать...
Не, проще оказалось использовать адаптивный метод с многоугольником. Хотя, если по мне, так ModifyWorldTransform глобальней.
Оставить комментарий
margadon
а то только стандартный нашёл. Хочется, чтобы это работало быстро, да к тому же без операций BitBlt... Я много хочу? Или есть выход? Могу нарисовать брезенхамом эллипс, но вот поворот туда ну никак не лезет=((параллельно роюсь в гугле, что-то ничего толкового нет... )