Показать сообщение отдельно
  #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;
Ответить с цитированием