AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Rand für Canvas TextOut Schrift
Thema durchsuchen
Ansicht
Themen-Optionen

Rand für Canvas TextOut Schrift

Ein Thema von Popov · begonnen am 8. Jun 2012 · letzter Beitrag vom 9. Jun 2012
Antwort Antwort
Popov
(Gast)

n/a Beiträge
 
#1

Rand für Canvas TextOut Schrift

  Alt 8. Jun 2012, 16:10
Ich möchte meinem Text, den ich über Canvas.TextOut ausgebe, einen Rand um die Buchstaben spendieren, zwecks besserer Lesbarkeit. Was ich bisher mache ist eine neunfache Ausgabe das Textes, zuerst um einen Pixel zu allen Seiten versetzt in Farbe X, und zuletzt noch einmal in die Mitte mit Farbe Y. Klappt eigentlich relativ gut, zumindest optisch kann man nichts dagegen sagen. Nur gefällt mir das so allgemein nicht. Neun mal einen Text ausgeben ist Quatsch. Gibt es was besseres?
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Rand für Canvas TextOut Schrift

  Alt 8. Jun 2012, 16:30
Wie wäre es mit dem "richtigen" Font? (ich glaube shaded ist das Stichwort)
oder habe ich da etwas falsch verstanden?
Deine Methode der Ausgabe finde ich etwas seltsam, da doch im allgemeinen immer ein Buchstabe mit Hintergrund gezeichnet wird?

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#3

AW: Rand für Canvas TextOut Schrift

  Alt 8. Jun 2012, 16:36
Wenn man Brush auf bsClear stellt, dann nicht.
  Mit Zitat antworten Zitat
Thom

Registriert seit: 19. Mai 2006
570 Beiträge
 
Delphi XE3 Professional
 
#4

AW: Rand für Canvas TextOut Schrift

  Alt 8. Jun 2012, 16:39
Such mal nach den Begriffen "Draw Text Outline". Dazu gibt es etliche Lösungen. Hier ist eine unter Benutzung eines Pfades. Der Nachteil der Pfad-Variante ist allerdings, daß die Umrandung kein Antialiasing besitzt und es sich um einen Vektor-Font handeln muß.
Thomas Nitzschke
Google Maps mit Delphi
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#5

AW: Rand für Canvas TextOut Schrift

  Alt 8. Jun 2012, 17:12
Das Beispiel ist schon mal interessant, zeichnet aber soweit ich es erkennen kann nur den Rand.

Das (Anlage) ist das Ergebnis meines Codes. Hier mal der Code, nur finde ich den etwas übertrieben.

Delphi-Quellcode:
procedure TextOutFontBorder(Canvas: TCanvas; x, y: Integer; Text: String;
  ColorFont, ColorFontBorder: TColor; FontBorder: Boolean);
var
  bx, by: Integer;
begin
  if FontBorder then
  begin
    Canvas.Font.Color := ColorFontBorder;
    for bx := 0 to 2 do //Font-Rand zeichnen
      for by := 0 to 2 do
        Canvas.TextOut(x + (1 - bx), y + (1 - by), Text);
  end;
  Canvas.Font.Color := ColorFont;
  Canvas.TextOut(x, y, Text);
end;
Aber ich gucke mir an was es unter den Begriffen gibt.
Miniaturansicht angehängter Grafiken
8.png  
  Mit Zitat antworten Zitat
Thom

Registriert seit: 19. Mai 2006
570 Beiträge
 
Delphi XE3 Professional
 
#6

AW: Rand für Canvas TextOut Schrift

  Alt 8. Jun 2012, 18:48
Du mußt vorher dem Pinsel noch eine Farbe zuweisen - dann wird der Pfad auch gefüllt. Allerdings sieht das Ergebnis durch die fehlende Kantenglättung etwas ... unschön aus.

Nutzt Du Graphics32? Dafür gibt es eine schöne Erweiterung, die auch umrandeten Text beherrscht.
Thomas Nitzschke
Google Maps mit Delphi

Geändert von Thom ( 8. Jun 2012 um 19:24 Uhr) Grund: Link hinzugefügt
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#7

AW: Rand für Canvas TextOut Schrift

  Alt 8. Jun 2012, 20:29
ich wiederhole mich, sorry, mit GDI+ und Path recht einfach, im Beispiel der Text "Test"
Delphi-Quellcode:
  Graphics := TGPGraphics.Create(BackImage.Canvas.Handle);
  graphics.SetSmoothingMode(SmoothingModeHighQuality);
  graphics.SetTextRenderingHint(TextRenderingHintAntiAlias);
  Brush:=TGPSolidBrush.Create(ColorToTGPColor(clRed,200));
  FontFamily := TGPFontFamily.Create('Arial narrow');
  aFont := TGPFont.Create(FontFamily,80);
  Pen:=TGPPen.Create(ColorToTGPColor(clRed,200));
  fmt:=TGPStringFormat.Create;
  try
  path := TGPGraphicsPath.Create;
  path.AddString('Test',-1,FontFamily,1,150,MakePoint(100,100),fmt);
  Graphics.DrawPath(pen,path);
  // Graphics.FillPath(brush,path);
  path.Free;
  pen.Free;
  Graphics.DrawString(FormatDateTime('hh:nn:ss',now),-1,aFont,MakePoint(0.0,0),Brush);
Miniaturansicht angehängter Grafiken
outline.png   outline2.png  
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)

Geändert von Bummi ( 8. Jun 2012 um 20:39 Uhr)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#8

AW: Rand für Canvas TextOut Schrift

  Alt 9. Jun 2012, 08:13
Danke, gucke ich mir an, aber wieso sorry, hast du es mir gegenüber schon mal erwähnt?
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#9

AW: Rand für Canvas TextOut Schrift

  Alt 9. Jun 2012, 08:36
Nein, aber ich preise die Vorzüge ständig an wenn es um Grafikausgaben geht ...
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz