Seite 1 von 2

Line vs LineXY & DrawText Qualität

Verfasst: 26.10.2009 12:56
von STARGÅTE
Tachchen,

mir ist eben aufgefallen das Line und LineXY nicht mehr die gleichen ergebnisse liefern:

Code: Alles auswählen

OpenWindow(0,0,0,200,100,"")
StartDrawing(WindowOutput(0))
 For y = -3 To 3
  Line(25,y*10+50,50,y)
  LineXY(125,y*10+50,125+50,y*10+50+y)
 Next
StopDrawing()

Repeat

Until WaitWindowEvent() = #PB_Event_CloseWindow 
Mir ist klar, da in der neuen Beta versucht worden ist einen Bug zu beheben, aber ich finde es jetzt sehr schlecht das eine Line mit Höhe oder Breite 0 garnicht mehr dargestellt wird.

Ich dachte mir immer das der Sinn hinter Width und Height bei Line() der ist, das die Linie bei x,y beginnt also den erstenPixel hat, und sich dann Width-Pixel nach Rechts beweg und Hight-Pixel nach unten.
Würde bedeuten das Line(x,y,2,4) eine ausdehung von 3x5 Pixel hat, so wie es auch bei LineXY der fall ist, wenn
LineXY(x,y,x+2,y+4).
Oder bei Circle(x,y,4) wird auch vom Mittleren Pixel ausgegangen und dann 4 nach alle Seiten gegangen, sodass der Kreis eine Ausdehung von 9Pixeln hat.
Stattdessen ist bei Line() nun die Ausdehung gemeint, und dann ist es ja nur logisch eine Linie ohne Höhe nicht darzustellen, was aber irgendwie eine art "definitionslücke" ist

Vorallem bei meinen eigenen Ellipsen und anderen Krumlinigen Sachen wo ich immer lieber statt LineXY ein Line genommen habe, habe ich nun haufenweise fehler (verrückungen und Lücken).

Sollte ich nun lieber auf LineXY umsteigen, damit ich "meine Definition" einer Linie habe, oder sollte ich die Line() Procedure als Macro umschreiben sodass ich noch den 1Pixel dazunehme (egal in welche richtung).

Was wird in der Zukunft noch geändert ?

Re: Line vs LineXY

Verfasst: 26.10.2009 12:58
von Kaeru Gaman
steig auf LineXY um, das besteht nicht mehr wie früher aus zwei calls.

im Englischen wurde hierüber lang und breit diskutiert, warum und was geändert wurde.

Re: Line vs LineXY

Verfasst: 26.10.2009 17:09
von NicTheQuick
Huch, das kannte ich ja noch gar nicht. Wer ist denn auf die Schnapsidee gekommen?

Ich finde das im englischen Forum irgendwie nicht. Hat jemand den Link grad da? Danke!

Re: Line vs LineXY

Verfasst: 26.10.2009 17:11
von Kaeru Gaman
schon mal beobachtet, wie Höhe und Breite einer Linie definiert sind,
was bei Grafikprgrammen wie z.B. Paint in der Statusleiste angezeigt wird?

hier ist der Link zur Diskussion im Englischen
http://www.purebasic.fr/english/viewtop ... 48#p301948

Re: Line vs LineXY

Verfasst: 28.10.2009 10:28
von #NULL
>> Wer ist denn auf die Schnapsidee gekommen?
dit wa icke :mrgreen:
kam daher, dass meine gezeichneten gui elemente plötzlich krumme checkbox-kreuzchen hatten. da habe ich mir Line() mal genauer angesehen und diese sachen bemerkt. dabei ging es mir aber in erster linie darum: "..draws lines one pix longer in dimensions if width/height are > 0".

Re: Line vs LineXY

Verfasst: 31.10.2009 17:57
von STARGÅTE
Es gibt auch n neues Problem mit DrawText und einigen Fonts:

In älteren PB versionen wurde eine Schift immer "gut" dargestellt mit geglätteten Rändern.
in der neuen BEta wird das nicht mehr gemacht, gar ignoriert:

Code: Alles auswählen

CreateImage(0, 256, 256, 32)
  Font1 = LoadFont(#PB_Any, "Times New Roman", 12)
  Font2 = LoadFont(#PB_Any, "Times New Roman", 14)
  Font3 = LoadFont(#PB_Any, "Times New Roman", 12, #PB_Font_HighQuality)
  Font4 = LoadFont(#PB_Any, "Times New Roman", 14, #PB_Font_HighQuality)

StartDrawing(ImageOutput(0))
  DrawingMode(1)
  FillArea(0,0,-1,$FFFFFF)
  DrawingFont(FontID(Font1))
  DrawText(10,10,"2x", $000000)
  DrawingFont(FontID(Font2))
  DrawText(10,60,"2x", $000000)
  DrawingFont(FontID(Font3))
  DrawText(10,110,"2x", $000000)
  DrawingFont(FontID(Font4))
  DrawText(10,160,"2x", $000000)
StopDrawing()

SetClipboardImage(0)

OpenWindow(0, 0, 0, ImageWidth(0), ImageHeight(0), "Fenster", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  ImageGadget(0,0,0,ImageWidth(0), ImageHeight(0), ImageID(0))

Repeat
  Event = WaitWindowEvent()
  Select Event
    Case #PB_Event_CloseWindow
      End
  EndSelect
ForEver
Ergebnis: (links 4.4 b5, rechts PB 4.31)
Bild

Wird das noch korrigiert ? wenn nicht dann müsste ich in zukunft auf API zurückgreifen, weil ich da sagen kann das der Glätten soll.

Außerdem versteh ich nicht was der Flag: #PB_Font_HighQuality überhaupt bewirkt .

PS: vllt wäre auch ein neuer Flag: #PB_Font_ClearType die lösung ...

Re: Line vs LineXY & DrawText Qualität

Verfasst: 29.04.2010 23:18
von KTX82
Hi!

bin über die Suche auf dieses Thema gestoßen, weil ich mal wieder damit angefangen hab ein Progrämmchen zu schreiben, allerdings stehe ich nun vor exakt dem gleichen, hässlichen Problem (4.50 Beta 3).
Über ImageGadgets sieht DrawText mit DrawingMode Transparent extrem fürchterlich aus, wie im Bild von Stargate, wenn ich den Hintergrund allerdings mit DrawImage statt ImageGadget erstelle, sieht der Text einwandfrei aus wie es auch sein soll.

Hat da schon jemand eine Lösung, wie Text sauber "über" ein ImageGadget zu bekommen ist?

Die Möglichkeit für jedes ImageGadget das Image doppelt anzulegen - Image1 = Originalhintergrund, Image2 = Mit dem Gadget verknüpfter Hintergrund (Image1 in Image2 kopieren, per Drawing den Text auf das 2. drauf -> Bei einer Änderung wieder Image1 in Image2 kopieren und so weiter) - was mir erst mal in den Sinn kam erscheint mir doch recht absurd um das gewünschte Ergebnis zu bekommen.

Edit: Ach du liebe Zeit - hab ja noch ein ganz verstaubtes Avatar ^^

Re: Line vs LineXY & DrawText Qualität

Verfasst: 29.04.2010 23:38
von Kaeru Gaman
ich komm jetzt nicht ganz mit...
was ist falsch daran, ein Hintergrundbild als extra Image zu haben, und es dann auf das Zielimage aufzubringen und danach den Text?

PS:
sorry, was du eben als "absurd" bezeichnest, ist meiner Erfahrung nach die einzig sinnvolle Vorgehensweise...
... außer wir reden grad aneinander vorbei.

Re: Line vs LineXY & DrawText Qualität

Verfasst: 29.04.2010 23:40
von STARGÅTE
Bitte nutze diese Procedure, zum "schöneren" Laden einer Font: (ClearType)

Code: Alles auswählen

 ; Lädt eine Font mit ClearTyp
 Procedure LoadClearTypeFont(Name$, Size.i, Style=0)
  Protected LogFont.LOGFONT 
  With LogFont
   \lfHeight         = -Size
   \lfWidth          = 0
   \lfEscapement     = 0
   \lfOrientation    = 0 
   If Style & #PB_Font_Bold       : \lfWeight = 700 : Else : \lfWeight = 400 : EndIf
   If Style & #PB_Font_Italic     : \lfItalic = #True : Else : \lfItalic = #False : EndIf  
   If Style & #PB_Font_Underline  : \lfUnderline = #True : Else : \lfUnderline = #False : EndIf  
   If Style & #PB_Font_StrikeOut  : \lfStrikeOut = #True : Else : \lfStrikeOut = #False : EndIf  
   \lfCharSet        = #DEFAULT_CHARSET
   \lfOutPrecision   = #OUT_DEFAULT_PRECIS	
   \lfClipPrecision  = #CLIP_DEFAULT_PRECIS 
   \lfQuality        = #CLEARTYPE_QUALITY
   \lfPitchAndFamily = #DEFAULT_PITCH | #FF_DONTCARE 
   PokeS(@\lfFaceName[0], Name$) 
  EndWith
  ProcedureReturn CreateFontIndirect_(@LogFont) 
 EndProcedure
Rückgabewert ist gleich die FontID ...

Re: Line vs LineXY & DrawText Qualität

Verfasst: 30.04.2010 00:06
von KTX82
Vielen dank für die Procedure ;o) Werde das gleich mal probieren.

@Kaeru Gaman: Ich habe mir eben nochmal in aller ruhe alle Möglichkeiten und Vorgehensweisen auch bei sich ständig aktualisierenden Text über Hintergrund durchgedacht - und sicher, es war ein blöder Gedanke meinerseits.
Ich glaube so spät sollte ich nicht mehr denken, vor allem da ich etwas aus der Übung bin ^^ Stimme dir natürlich voll und ganz zu. :allright: