Schrift als Kreis verbiegen

Für allgemeine Fragen zur Programmierung mit PureBasic.
Calloway
Beiträge: 106
Registriert: 15.09.2004 23:26

Schrift als Kreis verbiegen

Beitrag von Calloway »

Hallo!

Suchfunktion -> ergebnislos. Ich wusste auch nicht, wonach ich suchen sollte.

Mein Problem: Ich möchte Text als Kreis verbogen ausdrucken, so ähnlich wie die Copyrightvermerke an den Außenrändern von "bespielten" CDs. Ich denke ich müsste da über die Grafikfunktionen gehen. Aber wie gehe ich das am besten an? Und wie bekomme ich das auf den Drucker?

Vielen Dank schon mal für eure Hilfe.
Just_reading
Beiträge: 13
Registriert: 26.07.2006 03:26

Beitrag von Just_reading »

Du könntest CreateFont_ verwenden.
Dazu müsstest du nur aus die einzelnen Buchstaben mittels einer Kreisberechnung und der Angabe des Winkels bei CreateFont_ deinen Text auf ein Image oder einen anderen DC zeichnen.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

Am besten du machst es so :

Du machst dir ein leeres Sprite3D, welches du auf dem Bildschirm anzeigst.
Dann wird ein buchstabe auf dem Bildschirm wo das Sprite ist angezeigt.
Dann machst du GrabSprite() und machst aus diesem wieder ein Sprite3D und lässt es um ein paar Grad drehen und dann anzeigen.
Nun lässt du den nächsten buchstarben anzeigen (der ist dann etwas daneben) usw.

Allerding wird das ergibsnis dich nicht recht zufrieden , denn die ersten Buchstaben könnten sehr komisch verschwommen sein, musst du einfach mal testen :allright: [/code]
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Just_reading
Beiträge: 13
Registriert: 26.07.2006 03:26

Beitrag von Just_reading »

Ich bin gespannt wie du ein Sprite ausdruckst ;-)

Und wie bekomme ich das auf den Drucker?
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Hm ... also fals sich mit der Suche keine Ergebnise erziehlen lassen,
könnte er sein Sprite immer noch in ein Images umwandeln lassen. Fals
er aber zu faul für die Suche ist (weis jetzt nicht ob das im deutschen
oder englischen Forum war) könnte er das Sprite immer noch
abspeichern und dann als Image laden.

Allerdings sind glaub beide Methoden ziemlich Rechenlasstig und nichts
für die "Echtzeit". Aber mit der Sprite3D-Lib kann er seine Buchstaben
mittels der PB Befehle drehen. Im Forum lassen sich aber sicher auch
sogar fertige Prozeduren finden, welche normale Sprites oder sogar
Images drehen. Bei der suche eventuell auch das englische Forum und
Code-Archiv mit einbinden :wink: .

Um die richtigen Koordinaten und den Winkel raus zu bekommen für
jeden Buchstaben brauchst du die entsprechenden Funktionen zur
Berechnung von Kreisen. Hm, mir fallen da die Suchwörter
"Kreisberechnung", "Durchmesser", "Winkel", "Radus", "Umfang" ein.
Vielleicht sucht auch ein anderer wenne glück hast.

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Just_reading
Beiträge: 13
Registriert: 26.07.2006 03:26

Beitrag von Just_reading »

Ich verstehe nicht warum du es so umständlich machen würdest.
Die Api und die Mathematik bieten hier alles Nötige.


Wie ich schon oben geschrieben habe, muß noch der Text Buchstabe für Buchstabe CreateFont_ im richtigen Winkel eingestellt und über TextOut_ auf dem DC mittels einer Kreisbahnberechnung ausgegeben werden.

Fertige Kreisberechnungen findest du in Pure-Board, PureBasic-Lounge, PureArea.net und auch im englischen PureBasic-Forum nahezu unzählbar.
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Jetzt habe ich mich mal wieder an Grafik in PB versucht. :mrgreen:
So könnte man es z.B. mittels API machen. Falls jemand eine
PB-Demo-Version hat, ist dieser Source, so wie er ist, leider nicht funktionsfähig.

Hier mal, wie man es direkt auf Windows-Fenster ohne über die ganzen
SpritesundScreenextras zu zeichen. Für das Drucken und für das kopieren
des aktiven Fensters gibt es schon einige Tips z.B. in PureArea.net

Code: Alles auswählen

;Author: Falko Lünsmann
;API and PB3.94: Draws simple Text on circle


Procedure DrawRText(DC.l,x,y,Text.s,fFont.s,fangle.l,fHeight)
  Font = CreateFont_(fHeight,0,fangle*10,0,0,0,0,0,0,0,0,0,0,fFont)
  GetWindowRect_(WindowID(),r.RECT)
  OldFont = SelectObject_(DC,Font)
  SetTextAlign_(DC,#TA_BASELINE	)
  SetBkMode_(DC,#TRANSPARENT)
  ExtTextOut_(DC, x,y,0 ,r,Text,Len(Text),0 )
  SelectObject_(DC,OldFont)
  DeleteObject_(Font)
EndProcedure

 OpenWindow(0, 0, 0, 400, 400, #PB_Window_SystemMenu|#PB_Window_ScreenCentered, "Arc and bezier curves")
 
 Procedure Circle_Text(String$)
  hDc=StartDrawing(WindowOutput())
  If hDc
      FrontColor(0,255,0)
      Radius=180
      String$="Purebasic 4 you"
  
      For i=1 To Len(string$)
         Zeichen$=Mid(String$,i,1)
         Winkel=20 * i
         X = Radius*Sin(Winkel/360*2*#PI)
         Y = Radius*Cos(Winkel/360*2*#PI)
         DrawRText(hDc,WindowWidth()/2+X,WindowHeight()/2+Y,Zeichen$,"Arial",Winkel,40)
      Next i
   StopDrawing()
   EndIf
  EndProcedure
 Circle_Text("Happy Purebasic4")
 Repeat
  Event=WaitWindowEvent()
  If Event=#PB_EventMoveWindow:Circle_Text("Happy Purebasic4"):EndIf ;  Redraw Windows!
 Until Event = #PB_EventCloseWindow
Grüße Falko
Zuletzt geändert von Falko am 26.07.2006 21:57, insgesamt 1-mal geändert.
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Habs mal an PB4 angepaßt :mrgreen:

Code: Alles auswählen

;Author: Falko Lünsmann
;API and PB4: Draws simple Text on circle
; changed for PB4: ts-soft

Procedure DrawRText(DC.l,x,y,Text.s,fFont.s,fangle.l,fHeight)
  Font = CreateFont_(fHeight,0,fangle*10,0,0,0,0,0,0,0,0,0,0,fFont)
  GetWindowRect_(WindowID(0),r.RECT)
  OldFont = SelectObject_(DC,Font)
  SetTextAlign_(DC,#TA_BASELINE   )
  SetBkMode_(DC,#TRANSPARENT)
  ExtTextOut_(DC, x,y,0 ,r,Text,Len(Text),0 )
  SelectObject_(DC,OldFont)
  DeleteObject_(Font)
EndProcedure

 OpenWindow(0, 0, 0, 400, 400, "Arc and bezier curves", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
 
 Procedure Circle_Text(String$)
  hDc=StartDrawing(WindowOutput(0))
  If hDc
      FrontColor(RGB(0,255,0))
      Radius=180
      String$="Purebasic 4 you"
 
      For i=1 To Len(string$)
         Zeichen$=Mid(String$,i,1)
         Winkel=20 * i
         X = Radius*Sin(Winkel/360*2*#PI)
         Y = Radius*Cos(Winkel/360*2*#PI)
         DrawRText(hDc,WindowWidth(0)/2+X,WindowHeight(0)/2+Y,Zeichen$,"Arial",Winkel,40)
      Next i
   StopDrawing()
   EndIf
  EndProcedure
 Circle_Text("Happy Purebasic4")
 Repeat
  Event=WaitWindowEvent()
  If Event=#PB_Event_MoveWindow : Circle_Text("Happy Purebasic4") : EndIf ;  Redraw Windows!
 Until Event = #PB_Event_CloseWindow
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Hi, Thomas, hab's mal auf Pb3.94 korrigiert <) (Ausser den bei dir :lol: )
Irgendwann werde ich die alten PB-versionen vernichten.

Es kann nur einen geben :mrgreen:


Gruß Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Calloway
Beiträge: 106
Registriert: 15.09.2004 23:26

Beitrag von Calloway »

Vielen Dank für die rege Teilnahme und für den fertigen Code. Mal schauen, was ich daraus machen kann.
Antworten