Hallo, ich hab da mal ne Frage.
Ich möchte um einen Text, den ich mit DrawText auf ein Image gezeichnet habe einen Rand zeichnen. Dazu benötige ich die Größe (Länge und Höhe) des Textes in Pixeln.
Ich habe es schon mit GetTextExtentPoint32 versucht, aber das was ich da zurück bekomme stimmt irgendwie nicht.
Hat jemand sowas schon mal gemacht?
Hugo
Textlänge bei Grafiktext
Habe folgenden Source von GPI ausm PB-Archiv gefischt:
MFG Lukaso
Code: Alles auswählen
;see the example, how to get the hdc
Procedure GetTextHeight(hdc)
tm.textmetric
PrevMapMode=SetMapMode_(hdc,#mm_text)
gettextmetrics_(hdc,tm)
If prevmapmode
setmapmode_(hdc,prevmapmode)
EndIf
ProcedureReturn tm\ mHeight
EndProcedure
LoadFont(0,"TeXplus EX",10)
CreateImage(0,100,100)
hdc=StartDrawing(ImageOutput()) ; start drawing and get the HDC
DrawingFont(UseFont(0)) ; Use the own font
Height=GetTextHeight(hdc) ; how big it is
;draw a text with a pixel-line between the text
Locate(1,1)
DrawText("XYZ")
Locate(1,1+Height+1)
DrawText("abc")
StopDrawing()
CloseFont(0)
;display it
OpenWindow(0,0,0,100,100,#pb_window_screencentered,"TEST")
CreateGadgetList(WindowID())
ImageGadget(0,0,0,100,100,ImageID())
Repeat
Until WaitWindowEvent()=#pb_event_closewindow
EndNextgen Guild Wars Fanseite: Guild Wars Tactics (Pseudo-Admin + Developer)
"Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht." - Unbekannter Autor
"Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht." - Unbekannter Autor
-
DarkDragon
- Beiträge: 6291
- Registriert: 29.08.2004 08:37
- Computerausstattung: Hoffentlich bald keine mehr
- Kontaktdaten:
Linux und Windows version:
Code: Alles auswählen
Procedure ViewImage()
Win = OpenWindow(#PB_Any, 0, 0, ImageWidth(), ImageHeight(), #PB_Window_SystemMenu, "Image")
CreateGadgetList(WindowID())
Gadget = ImageGadget(#PB_Any, 0, 0, ImageWidth(), ImageHeight(), ImageID())
Repeat
Event = WindowEvent()
If EventWindowID() = Win And Event = #PB_Event_CloseWindow
Quit = 1
Else
UseWindow(Win)
ActivateWindow()
EndIf
Delay(10)
Until Quit = 1
CloseWindow(Win)
EndProcedure
Procedure GetFontHeight(FontID, PtSize)
PtSize * 1.5
Img = CreateImage(#PB_Any, PtSize, PtSize)
StartDrawing(ImageOutput())
DrawingFont(FontID)
Box(0, 0, PtSize, PtSize, $FFFFFF)
Locate(0, 0)
DrawText("gjf")
For x=0 To PtSize-1
For y=0 To PtSize-1
Color = Point(x, y)
If Color = $000000
If y < MinY : MinY = y : EndIf
If y > MaxY : MaxY = y : EndIf
EndIf
Next
Next
StopDrawing()
ViewImage()
FreeImage(Img)
ProcedureReturn MaxY-MinY
EndProcedure
LoadFont(0, "Times New Roman", 70)
MessageRequester("", Str(GetFontHeight(FontID(), 70)))
CloseFont(0)
Zuletzt geändert von DarkDragon am 23.08.2005 10:07, insgesamt 1-mal geändert.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.