Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник
Коллекция курьезных вопросов из форумов
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

SetWindowExtEx и смещение координат [D7]


K-1000 ©   (30.01.19 18:44

привет всем

делаю графический редактор на подобии Paint.
остановился на масштабировании холста.

в сети нашёл такой код масштабирования:

procedure SetCanvasZoomFactor(Canvas: TCanvas; AZoomFactor: Integer);
var
 i: Integer;
begin
 SetStretchBltMode(Canvas.Handle, HALFTONE);

 SetMapMode(Canvas.Handle, MM_ISOTROPIC);
 SetWindowExtEx(Canvas.Handle, AZoomFactor, AZoomFactor, nil);
 SetViewportExtEx(Canvas.Handle, 100, 100, nil);
end;


всё работает хорошо, но только когда я рисую линии они смещены в сторону.

как это исправляется? где получить это смещение?


K-1000 ©   (31.01.19 00:30[1]

Модераторы, перенесите пожалуйста тему в "Основное"


Сапёр   (02.02.19 16:58[2]

Почему нельзя масштабировать битмап или векторные координаты примитивов? Лучше же, чем HDC мучать.


han_malign ©   (05.02.19 11:56[3]


>  где получить это смещение?

очевидно (Get/Set)(Window/Viewport)OrgEx

> как это исправляется?

- никак, там со смещением какой то глюк, вероятно связанный с ошибкой округления целочисленного вычисления.
Пробуй SetWorldTransform...
     
     SetGraphicsMode(DC, GM_ADVANCED);
     with _xform do begin
     eM11:= AZoomFactor;
     eM12:= 0.0;
     eM21:= 0.0;
     eM22:= AZoomFactor;
     eDx:= XOffset;
     eDy:= YOffset;
     end;
     SetWorldTransform(DC, _xform);
     GetBrushOrgEx(DC, pt);
     SetStretchBltMode(DC, HALFTONE);
     SetBrushOrgEx(DC, pt.x, pt.y, @pt);


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо