Schrift als Kreis verbiegen
Schrift als Kreis verbiegen
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.
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.
-
- Beiträge: 13
- Registriert: 26.07.2006 03:26
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
[/code]
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

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
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
-
- Beiträge: 13
- Registriert: 26.07.2006 03:26
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
.
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
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

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
-
- Beiträge: 13
- Registriert: 26.07.2006 03:26
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.
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.
- 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:
Jetzt habe ich mich mal wieder an Grafik in PB versucht. 
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
Grüße Falko

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
Zuletzt geändert von Falko am 26.07.2006 21:57, insgesamt 1-mal geändert.
- 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
Habs mal an PB4 angepaßt

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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- 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: