Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2009, 15:43   #1
Македонский
Александр
Форумчанин
 
Аватар для Македонский
 
Регистрация: 15.08.2007
Сообщений: 112
По умолчанию Вращение (поворот на заданный угол) векторного изображения

Вообщем, использую один прекрасный компонент для работы с векторными изображениями, построенных с помощью слоев (карты). Отображает географические координаты точек объектов. Очень нужно поворачивать на определенный угол относительно выбранной точки всю карту.
Подскажите как мне написать процедуру поворота? Может, кто сталкивался...
Македонский вне форума Ответить с цитированием
Старый 26.02.2009, 18:18   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от Македонский Посмотреть сообщение
Вообщем, использую один прекрасный компонент для работы с векторными изображениями...
Подскажите как мне написать процедуру поворота?
Забавная постановка вопроса.
Отвечу в том же духе:
"Берем одну прекрасную процедуру поворота и поворачиваем..."
Ох, уж эти сказочники... Только б загадки загадывать.

Последний раз редактировалось mihali4; 26.02.2009 в 21:21.
mihali4 вне форума Ответить с цитированием
Старый 26.02.2009, 19:13   #3
Македонский
Александр
Форумчанин
 
Аватар для Македонский
 
Регистрация: 15.08.2007
Сообщений: 112
По умолчанию

Не понял вопроса - не отвечай, а если хочешь помочь, но не понял, спроси что именно тебе непонятно!
Попробую разжевать "слушателям сказок": у меня есть карта в виде слоев с объектами, точки границ поворота которых даны в географических координатах (а точнее, в градусах и тысячных долях градуса). Север наверху. Как изменить направление "Стрелки на север", или проще - как повернуть всю карту (все слои с объектами) относительно опорной точки (например, центра экрана)? Мой компонент (EasyMap)этого не может, увы. Я так понимаю, карта высвечивается в наследнике TImage.
Спросите, если что непонятно. Кто-нибудь, да сталкивался с этой проблемой...
Македонский вне форума Ответить с цитированием
Старый 26.02.2009, 19:30   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Вопрос нужно умееть задавать членораздельно, не припутывая необязательные и сбивающие с толку мелочи. В данном случае никому не интересно каким компонентом вы пользовались...
Код:
Вращение изображения

procedure rotateright(bitmap : timage); 
var firstc, lastc, c, r : integer; 

procedure fixpixels(c,r : integer); 
var savepix, savepix2 : tcolor; 
i, newc, newr : integer; 
begin 
savepix := bitmap.canvas.pixels[c,r]; 
for i := 1 to 4 do begin 
newc := bitmap.height-r+1; 
newr := c; 
savepix2 := bitmap.canvas.pixels[newc,newr]; 
bitmap.canvas.pixels[newc,newr] := savepix; 
savepix := savepix2; 
c := newc; 
r := newr; 
end; 
end; 

begin 
if bitmap.width <> bitmap.height then exit; 
bitmap.visible := false; 
with bitmap.canvas do begin 
firstc := 0; 
lastc := bitmap.width; 
for r := 0 to bitmap.height div 2 do begin 
for c := firstc to lastc do begin 
fixpixels(c,r); 
end; 
inc(firstc); 
dec(lastc); 
end; 
end; 
bitmap.visible := true; 
end;
Или так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var M:TXFORM;
    a:Double;
    HDC:THandle;
    B: TBitMap;
begin
   B := TBitMap.Create;
   //B.LoadFromFile('logo.bmp');
   B.Assign(Image1.Picture.Bitmap);
   hDc := image1.Canvas.Handle;
   SetGraphicsMode(hDc, GM_ADVANCED);
   M.eM11 := 1;
   M.eM12 := 0;
   M.eM21 := 0;
   M.eM22 := 1;
   M.eDx := -B.Width div 2;
   M.eDy := -B.Height div 2;
   SetWorldTransform(hDc, M);
   a := PI/6;
   fillChar(M, sizeOf(M), 0);
   M.eM11 := Cos(a);
   M.eM12 := Sin(a);
   M.eM21 := -Sin(a);
   M.eM22 := Cos(a);
   M.eDx := 0;
   M.eDy := 0;
   ModifyWorldTransform(hDc, M, MWT_RIGHTMULTIPLY);
   M.eM11 := 1;
   M.eM12 := 0;
   M.eM21 := 0;
   M.eM22 := 1;
   M.eDx := B.Width div 2;
   M.eDy := B.Height div 2;
   ModifyWorldTransform(hDc, M, MWT_RIGHTMULTIPLY);
   image1.Canvas.Draw(0, 0, b);
// или BitBlt(hDc, 0, 0, image1.Width, image1.Height, B.Canvas.Handle, 0, 0, SRCCOPY);
   B.Free;
end;

Последний раз редактировалось mihali4; 26.02.2009 в 19:35.
mihali4 вне форума Ответить с цитированием
Старый 26.02.2009, 20:53   #5
Македонский
Александр
Форумчанин
 
Аватар для Македонский
 
Регистрация: 15.08.2007
Сообщений: 112
По умолчанию

Очень благодарен вам за помощь! Правда есть одно "но": я не могу вызвать битмап с канваса, это ведь получится уже растровое изображение, а мне нужно поворачивать векторное... Или я не прав?
Я бы хотел, чтобы поделились опытом те, кто сталкивался с этим при работе с векторными изображениями. Или работают используя все же битмап?
Кстати, учту ваше замечание
Македонский вне форума Ответить с цитированием
Старый 26.02.2009, 21:11   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Не буду вдаваться в рассуждения о разнице между растровым и векторным изображением.
И то, и другое отображается на канве. И если вас что-то смущает, производите обработку копии канвы EasyMap на канве Image, а потом переносите на канву EasyMap. Вроде бы так...
К тому же ваши же слова
Цитата:
Я так понимаю, карта высвечивается в наследнике TImage.
mihali4 вне форума Ответить с цитированием
Старый 26.02.2009, 21:19   #7
Македонский
Александр
Форумчанин
 
Аватар для Македонский
 
Регистрация: 15.08.2007
Сообщений: 112
По умолчанию

Ух ты, а ведь и правда, надо пробовать! Просто не ожидал, что канве по барабану, что в нее загружено...
Спасибо Вам за то, что растолковали мне, бестолковому! ))) Как всегда - на элементарщине и парятся )))
Македонский вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Узнать угол зная X и Y Dj_smart Общие вопросы Delphi 12 12.05.2009 05:09
Поворот изображения на заданный угол. taller07 Мультимедиа в Delphi 4 28.11.2008 14:01
Вращение изображения beginner JavaScript, Ajax 5 07.07.2008 23:44
Поворот буквы на указанный угол delphin100 Общие вопросы Delphi 1 02.06.2008 16:28
Угол по тангенсу AVer Общие вопросы Delphi 9 01.02.2007 12:47