· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.WIN32 —› битмап под углом

Посл.отвђт Сообщенiе


Дата: Авг 14, 2003 17:53:03

подскажите плиз, как сделать сабж? есть хэндл битмапа, какими функциями можно вывести битмап под углом в 30 градусов?


Дата: Авг 14, 2003 19:42:32

PlgBlt


Дата: Авг 14, 2003 22:40:00

Спасибо! Буду разбираться...


Дата: Авг 15, 2003 07:29:43

На сколько я знаю, PlgBlt даёт разворот только на 90, 180 и т.д. градусов. Я с его помощью делал отражение битмапы (flipping). Можно по оси X или Y. Ещё он позволяет маскировать части изображения. Но в SDK о нём ясно сказано:
Scaling, translation, and reflection transformations are allowed in the source device context; however, rotation and shear transformations are not.
(Масштабирование, преобразования и отражения позволены в контексте-источнике, однако повороты и смещения - нет.)
Я могу посоветовать dz 3BePIOra поискать по Нету "bitmap rotation". Есть много материалов и способов это реализовать. Я этим в плотную не занимался ещё. Просто видел, что есть. Всё от COM объектов до расчёта координат собственными ручками.


Дата: Авг 16, 2003 10:58:49

В расчёте координат ручками нет ничего сложного. Выходной буфер заполняешь последовательно, координаты во входном битмапе вычисляешь простым прибавлением заранее вычисленного шага. Вычисления вести в фикседпоинте. Шаг по иксу и по игреку для поворота - это просто синус и косинус от угла. :) В общем, проще некуда. Зато простора для оптимизации и всяких наворотов - масса. То же масштабирование - это просто домножение шага по иксу и игреку на коэффициент. Если нужно не заполнение всего выходного буфера повёрнутой текстурой, а именно вывод одного повёрнутого битмапа, то из соображений эффективности можно не проверять на каждый пиксел выходного буфера попадает ли он в повёрнутый битмап, а просчитать стороны битмапа и прорисовать только то, то внутри. Тогда это будет уже настоящий текстурмаппинг. ;)

А ещё, у того же GDI+, если я ничего не путаю, были готовые функции для поворотов изображений. Во всяком случае, функция GdipRotateTextureTransform в доках фигурирует.

А если тебе это надо делать быстро и часто, то лучше посмотреть в сторону каких-нибудь аппаратно ускоренных апи. Загнав битмап в текстуру, можно будет рисовать его в любом виде с приличной скоростью и дополнительными маленькими радостями типа фильтрации или альфаканала.


Дата: Авг 17, 2003 09:41:26 · Поправил: dz 3BePIOra

Понимаете, я хочу графические часы написать со стрелочками по кругу, но не знаю как поворачивать стрелки. Можно, конечно, красиво нарисовать функциями ГДИ, но это ИМХО изврат... Может подскажете, как по другому сделать?


Дата: Авг 23, 2003 15:44:49

Здесь несколько страниц. Может будет полезно. Или ссылки.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.074