Macht DrawText() einen guten Job?
Verfasst: 25.05.2025 05:44
Im Test machen die Schriftzüge, die DrawText() auf's Image ausgibt einen echt schlechten optischen Eindruck. Das kann man im Vergleich daran erkennen, dass bei Übergröße und den gängigen Mitteln der Skalierung weit mehr Brillianz und Schärfe vorzufinden wären (wenn es das System performancemäßig erlaubt).
Stellt einfach in dem Quellcode mal den canvas::#scalingFactor auf 2, 4 oder 8 und die Schrift sieht bedeutend besser aus.
PB 5.73
(Kurz was das Programm macht: Schreibe auf ein Image, passe dieses in einen Canvas ein und update das ganze bei jeder Fenstergrößenänderung.)
Kann man denn vielleicht behaupten, dass DrawText() für individuelle GUI-Designs kaum geeignet ist?
Stellt einfach in dem Quellcode mal den canvas::#scalingFactor auf 2, 4 oder 8 und die Schrift sieht bedeutend besser aus.
PB 5.73
Code: Alles auswählen
; Test ob ein verkleinertes Image besser lesbare Schrift beinhalten kann
; 25.05.2025 // 05:00 CMT+2
declareModule app
;{
;{
#cv_text$ = "Skalierung (Schrift auf Image, Image auf Canvas)"
;}
;{
declare execute ( )
;}
;}
endDeclareModule
declareModule canvas
;{
;{
#scalingFactor = 1.0
;}
;{
declare get ( )
declare init ( *window )
declare paint ( )
;}
;}
endDeclareModule
declareModule window
;{
declare finish ( )
declare init ( )
declare inputCB ( )
;}
endDeclareModule
module app
;{
procedure execute ( )
;{
if ( window::init ( ) )
;{
repeat
until ( window::inputCB ( ) )
window::finish ( )
procedureReturn
;}
endIf
procedureReturn ( #true )
;}
endProcedure
;}
endModule
module canvas
;{
;{
define *canvas
;}
;{
procedure get ( )
;{
;{
shared *canvas
;}
;{
procedureReturn ( *canvas )
;}
;}
endProcedure
procedure init ( *window )
;{
;{
shared *canvas
;}
;{
if ( ( *window ) and ( isWindow ( *window ) ) )
;{
if ( useGadgetList ( windowId ( *window ) ) )
;{
*canvas = canvasGadget ( #pb_any,
0,
0,
0,
0 )
procedureReturn ( *canvas )
;}
endIf
;}
endIf
;}
procedureReturn
;}
endProcedure
procedure paint ( )
;{
;{
protected *image
static *font
;}
;{
shared *canvas
;}
;{
if ( ( not ( *font ) or ( not ( isFont ( *font ) ) ) ) )
;{
*font = loadFont ( #pb_any,
"Arial",
#scalingFactor * 12.0 )
;}
endIf
*image = createImage ( #pb_any,
#scalingFactor * gadgetWidth ( *canvas ),
#scalingFactor * gadgetHeight ( *canvas ) )
if ( ( ( *image ) and
( isImage ( *image ) ) and
( startDrawing ( imageOutput ( *image ) ) ) ) )
;{
if ( ( ( *font ) and ( isFont ( *font ) ) ) )
;{
drawingFont ( fontId ( *font ) )
box ( 0,
0,
imageWidth ( *image ),
imageHeight ( *image ),
#white )
drawText ( 25,
25,
app::#cv_text$,
#black,
#white )
;}
endIf
stopDrawing ( )
;}
endIf
resizeImage ( *image,
gadgetWidth ( *canvas ),
gadgetHeight ( *canvas ) )
if ( startDrawing ( canvasOutput ( *canvas ) ) )
;{
drawImage ( imageId ( *image ),
0,
0 )
stopDrawing ( )
freeImage ( *image )
procedureReturn ( #true )
;}
endIf
;}
procedureReturn
;}
endProcedure
;}
;}
endModule
module window
;{
;{
define *window
;}
;{
declare sizing ( )
;}
;{
procedure finish ( )
;{
;{
shared *window
;}
;{
unbindEvent ( #pb_event_sizeWindow,
@ sizing ( ) )
closeWindow ( *window )
procedureReturn ( #true )
;}
procedureReturn
;}
endProcedure
procedure init ( )
;{
;{
shared *window
;}
;{
*window = openWindow ( #pb_any,
#pb_ignore,
#pb_ignore,
640,
400,
#empty$,
#pb_window_invisible |
#pb_window_systemMenu |
#pb_window_sizeGadget )
bindEvent ( #pb_event_sizeWindow,
@ sizing ( ) )
if ( canvas::init ( *window ) )
;{
sizing ( )
hideWindow ( *window,
#false )
procedureReturn ( #true )
;}
endIf
procedureReturn
;}
;}
endProcedure
procedure inputCB ( )
;{
procedureReturn ( bool ( waitWindowEvent ( ) = #pb_event_closeWindow ) )
;}
endProcedure
procedure sizing ( )
;{
;{
shared *window
;}
;{
resizeGadget ( canvas::get ( ),
0,
0,
windowWidth ( *window ),
windowHeight ( *window ) )
canvas::paint ( )
;}
;}
endProcedure
;}
;}
endModule
app::execute ( )
; es_91
; Please excuse my style
(Kurz was das Programm macht: Schreibe auf ein Image, passe dieses in einen Canvas ein und update das ganze bei jeder Fenstergrößenänderung.)
Kann man denn vielleicht behaupten, dass DrawText() für individuelle GUI-Designs kaum geeignet ist?
