![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() У меня тут такая проблема.
Возможно ли сгладить объекты отрисованные старым 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
|
||||
|
||||
![]() Цитата:
|
#3
|
|||
|
|||
![]() Цитата:
На сколько я понял в этом исходнике изначально все уже построено с использованием ядра GDI+. К тексту написанному с использованием GDI+ (DPath.AddString), приминается сглаживание реализованное средствами того же GDI+ (Drawer.SetSmoothingMode(vdSM)). А у меня все построено с использованием старого ядра (GDI не плюс). Возможно ли применить сглаживание к объектам старого GDI, допустим средствами того же GDI+. Если нет, придется все таки переделывать весь проект. Может посоветуйте хорошую электронную книжку или другую русскоязычную инфу по GDI+. А исходник красивый. Спасибо. Пригодится. |
#4
|
|||
|
|||
![]() Вот сдесь хорошо написано http://www.rsdn.ru/?article/gdi/gdiplus1.xml в третьей части статьи про работу с примитивами и про сглаживание. Сам недавно искал ничего лучше в электронном виде не нашел.
|
#5
|
|||
|
|||
![]() Цитата:
|