Drucker DPI abfragen, Druckerfont in Points oder Pixel ?

Für allgemeine Fragen zur Programmierung mit PureBasic.
brandelh
Beiträge: 18
Registriert: 28.03.2005 21:30
Wohnort: Germersheim
Kontaktdaten:

Drucker DPI abfragen, Druckerfont in Points oder Pixel ?

Beitrag von brandelh »

Hi,

ich bin neu hier und wohl wie bei jeder Sprache mal wieder begeistert von den DPI abhängigen Druckroutinen. :roll:
Ich habe das Printer Beispiel durch und das kann hier drucken, aber wer will schon für jeden Druckertyp eine neue Druckroutine schreiben

1. LoadFont(0,"Arial",30) müsste ein riesiger Font sein, wenn wie hier behauptet in Points angegeben würde.
Offensichtlich sind es halt doch Pixel und auf meinem Drucker bestenfalls 8 Point.
2. OK ich muss also in Pixeln angeben, aber wie erhalte ich die Werte für DPI (Dots per Inch / Pixel pro Zoll) ?
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Drucker DPI abfragen, Druckerfont in Points oder Pixel ?

Beitrag von NicTheQuick »

Mit den normalen Purebasic-Druckerbefehlen kommst du da nicht weit. Leider...
Ich habe es damals so gelöst, dass ich 'PrinterPageWidth()' und 'PrinterPageHeight()' genutzt habe und dann auf DIN A4 Größe umgerechnet habe um die DPI heraus zu bekommen. Also in etwa so:

Code: Alles auswählen

#DIN_A4_WIDTH  = 210
#DIN_A4_HEIGHT = 297

Procedure.d getPrinterDPI()
	Protected xPxPerMm.d = PrinterPageWidth() / #DIN_A4_WIDTH
	Protected yPxPerMm.d = PrinterPageHeight() / #DIN_A4_HEIGHT
	
	Protected dpi.d = 25.4 * xPxPerMm
	
	ProcedureReturn dpi
EndProcedure

Macro mm(pos)
	(pos / 25.4)
EndMacro

If PrintRequester()
	If StartPrinting("Ein Blatt")
		If StartDrawing(PrinterOutput())
			
			Define dpi.d = getPrinterDPI()
			
			DrawingMode(#PB_2DDrawing_Transparent)
			If LoadFont(0, "Arial", mm(5))
				DrawingFont(FontID(0))
			EndIf
			DrawText(mm(5), mm(5), "Dieser Text ist 5 mm hoch und wird mit " + StrD(dpi, 2) + " gedruckt.", RGB(0, 0, 0))
			
			StopDrawing()
		EndIf
		
		StopPrinting()
	EndIf
EndIf
Leider konnte ich es nicht testen, da die Druckerlibrary unter Linux seit einer Weile nicht mehr geht. /:->
Benutzeravatar
CodeCommander
Beiträge: 213
Registriert: 02.03.2014 16:06

Beitrag von CodeCommander »

~ DELETE ~
Zuletzt geändert von CodeCommander am 18.01.2015 14:35, insgesamt 1-mal geändert.
~ DELETE ~
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Drucker DPI abfragen, Druckerfont in Points oder Pixel ?

Beitrag von NicTheQuick »

CodeCommander hat geschrieben:
NickTheQuick hat geschrieben:Leider konnte ich es nicht testen, da die Druckerlibrary unter Linux seit einer Weile nicht mehr geht. /:->
Im engl. Forum gemeldet?
Nicht nötig, da bekannt. Siehe auch http://www.purebasic.fr/english/viewtopic.php?f=15&t=59335&start=2
brandelh
Beiträge: 18
Registriert: 28.03.2005 21:30
Wohnort: Germersheim
Kontaktdaten:

Re: Drucker DPI abfragen, Druckerfont in Points oder Pixel ?

Beitrag von brandelh »

nachdem ich meine Sucheingabe etwas geändert habe, finde ich doch tatsächlich eine API Lösung:

http://www.purebasic.fr/german/viewtopi ... ucken+font

Code: Alles auswählen

PrinterDC.L = DefaultPrinter()
If PrinterDC
  Debug "Horizontale Auflösung = " + Str(GetDeviceCaps_(PrinterDC, #LOGPIXELSX)) + " DPI"
  Debug "Vertikale Auflösung = " + Str(GetDeviceCaps_(PrinterDC, #LOGPIXELSY)) + " DPI"
EndIf
Da dies nicht direkt von PureBasic vorgesehen ist, z.b. über eine automatische Skalierung auf A4 in 1/10 mm
ist das ganze nicht einfach umzusetzen.

PS: ich habe gerade gesehen, dass ich schon seit 2005 angemeldet bin, aber bisher habe ich mit PureBasic nicht gearbeitet.
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Drucker DPI abfragen, Druckerfont in Points oder Pixel ?

Beitrag von Danilo »

Mit gDrawing kannst Du die DPI abfragen, aber auch DPI-unabhängig drucken.
Zum Beispiel mit gSetUnit(#UnitMillimeter). Dann gibst Du alle Größen (Font, Koordinaten etc) in Millimeter an.

- [Windows] 2DDrawing commands with AntiAliasing through GDI+

Beispiel zum Drucken ist dabei.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
brandelh
Beiträge: 18
Registriert: 28.03.2005 21:30
Wohnort: Germersheim
Kontaktdaten:

Re: Drucker DPI abfragen, Druckerfont in Points oder Pixel ?

Beitrag von brandelh »

SUPER, danke !
Antworten