Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.02.2010, 13:17
neva26 neva26 вне форума
Прохожий
 
Регистрация: 02.02.2010
Сообщения: 3
Репутация: 10
Восклицание Сглаживание старого GDI

У меня тут такая проблема.
Возможно ли сгладить объекты отрисованные старым GDI. Думается для этого нужно использовать GDI+. Но я не в курсе как это реализовать.
Просто у меня есть проект, где все отрисовывает старый GDI. В принципе меня все устраивает, но хотелось бы сгладить все, чеб было по красивее. Пусть даже в ущерб скорости. Это будет как опция (On|Off).

Кто в теме помогите решить эту проблему. Спать уже не могу, она мне по ночам снится .

Я тут эксперементировал ( в меру своей компетентности в этом вопросе ), но ничего не получилось.

Код:
//  Uses GDIPAPI, GDIPOBJ;
procedure TForm1.FormPaint(Sender: TObject);
var
  LF: TLogFont;
  fnt: HFont;
  innerContainer: GraphicsContainer;
  graphics : TGPGraphics;
  brush: TGPSolidBrush;
  FontFamily: TGPFontFamily;
  Font: TGPFont;
  PN: TGPPen;
begin
  graphics := TGPGraphics.Create(self.Canvas.Handle);
  brush:= TGPSolidBrush.Create(MakeColor(255, 0, 0, 255));
  FontFamily := TGPFontFamily.Create('Times New Roman');
  Font := TGPFont.Create(fontFamily, 36, FontStyleRegular, UnitPixel);
  PN := TGPPen.Create(MakeColor(255, 0, 0, 0));

  // Здесь устанавливаю сглаживание обыектов
  graphics.SetTextRenderingHint(TextRenderingHintAntiAlias); // Сглаживаю текст
  graphics.SetSmoothingMode(SmoothingModeAntiAlias); // Сглаживаю объекты
//  graphics.SetCompositingQuality(CompositingQualityHighQuality);
//  graphics.SetInterpolationMode(InterpolationModeHighQualityBilinear);

      //++++++++++++++++++++++++++++++++++++++++++++
      // Объекты нарисовынные средствами GDI+
      graphics.DrawString('Текст GDI+', 15, font, MakePoint(20.0, 10.0), brush);
      PN.SetWidth(5);
      graphics.DrawLine(PN, 20, 10, 300, 100);
    //  graphics.DrawRectangle(PN,10,10,250,250);
      //++++++++++++++++++++++++++++++++++++++++++++

      innerContainer := graphics.BeginContainer();
      //++++++++++++++++++++++++++++++++++++++++++++
      // Объекты нарисовынные средствами старого GDI
      // ВОЗМОЖНО ЛИ ИХ ОТРИСОВАТЬ СГЛАЖЕННЫМИ
      LF.lfHeight := 50;
    //  LF.lfWeight := FW_BOLD;
      LF.lfUnderline := 1;
      LF.lfEscapement := 300;
      StrPCopy(LF.lfFaceName, 'Arial Bold');
      Fnt := CreateFontIndirect(LF);
      Canvas.Font.Handle := Fnt;
      Canvas.TextOut(0,300,'Текст GDI');
      Canvas.Pen.Width := 5;
      Canvas.LineTo(25,205);
      DeleteObject(Fnt);
      //++++++++++++++++++++++++++++++++++++++++++++
      graphics.EndContainer(innerContainer);

  PN.Free;
  Font.Free;
  brush.Free;
  FontFamily.Free;
  graphics.Free;
end;
Ответить с цитированием
  #2  
Старый 02.02.2010, 13:23
Аватар для Admin
Admin Admin вне форума
Администратор
 
Регистрация: 03.10.2005
Адрес: Россия, Москва
Сообщения: 1,551
Версия Delphi: Delphi 7
Репутация: выкл
По умолчанию

Цитата:
Сообщение от neva26
У меня тут такая проблема.
Возможно ли сгладить объекты отрисованные старым GDI. Думается для этого нужно использовать GDI+. Но я не в курсе как это реализовать...
http://www.delphisources.ru/pages/so...path-text.html
Ответить с цитированием
  #3  
Старый 02.02.2010, 15:51
neva26 neva26 вне форума
Прохожий
 
Регистрация: 02.02.2010
Сообщения: 3
Репутация: 10
По умолчанию

Цитата:
Сообщение от Admin

На сколько я понял в этом исходнике изначально все уже построено с использованием ядра GDI+. К тексту написанному с использованием GDI+ (DPath.AddString), приминается сглаживание реализованное средствами того же GDI+ (Drawer.SetSmoothingMode(vdSM)).

А у меня все построено с использованием старого ядра (GDI не плюс). Возможно ли применить сглаживание к объектам старого GDI, допустим средствами того же GDI+.

Если нет, придется все таки переделывать весь проект. Может посоветуйте хорошую электронную книжку или другую русскоязычную инфу по GDI+.

А исходник красивый. Спасибо. Пригодится.
Ответить с цитированием
  #4  
Старый 06.02.2010, 15:52
sergkl sergkl вне форума
Прохожий
 
Регистрация: 28.03.2009
Сообщения: 2
Репутация: 10
По умолчанию

Вот сдесь хорошо написано http://www.rsdn.ru/?article/gdi/gdiplus1.xml в третьей части статьи про работу с примитивами и про сглаживание. Сам недавно искал ничего лучше в электронном виде не нашел.
Ответить с цитированием
  #5  
Старый 07.02.2010, 01:50
neva26 neva26 вне форума
Прохожий
 
Регистрация: 02.02.2010
Сообщения: 3
Репутация: 10
По умолчанию

Цитата:
Сообщение от sergkl
Вот сдесь хорошо написано http://www.rsdn.ru/?article/gdi/gdiplus1.xml в третьей части статьи про работу с примитивами и про сглаживание. Сам недавно искал ничего лучше в электронном виде не нашел.
Интересный материал. Жалко что он для C++. Но все же пригодится. Спасибо те sergkl.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:57.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025