640x480 auf 1920x1080 strecken

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
northstarex
Beiträge: 103
Registriert: 25.08.2013 18:04
Computerausstattung: alles mögliche^^
Wohnort: Schöppenstedt
Kontaktdaten:

640x480 auf 1920x1080 strecken

Beitrag von northstarex »

Moin,

nach gefühlt 86986 Jahren habe ich mal wieder eine Frage :)

Ich möchte in einen 1920x1080 Window einen 640x480 Screen auf die gesamte Windowgröße skalieren. ich weiß, dass man, wenn man Autostretch gesetzt hat, mit der Maus den Window Inhalt automatisch auf die Größe skalieren kann. Ich möchte es aber, dass dieses im Programm automatisch erfolgt.

Gibt es da einen passenden Befehl oder gibt es da ne andere Lösung?

Auzug:
If OpenWindow(0, 0, 0, 1920, 1080, "blabla", #PB_Window_BorderLess)

If OpenWindowedScreen(WindowID(0), 240, 0, 640, 480, #False, 0, 0, #PB_Screen_WaitSynchronization)

So wird nur in der Tat ab x240 640x480 dargestellt. Ich dachte immer, dass dann 640x480 automatisch auf die gesamte Windowfläche gestetcht wird.

bis denne...
North
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: 640x480 auf 1920x1080 strecken

Beitrag von STARGÅTE »

Du musst da vermutlich nachhelfen mit ResizeWindow:

Code: Alles auswählen

Enumeration
	#Window
EndEnumeration

InitSprite()
OpenWindow(#Window, 0, 0, 480, 270, "A screen in a window...", #PB_Window_BorderLess | #PB_Window_ScreenCentered | #PB_Window_Invisible)
OpenWindowedScreen(WindowID(#Window), 0, 0, 480, 270, 1, 0, 0)
ResizeWindow(#Window, 0, 0, 1920, 1080)
HideWindow(#Window, #False)

Repeat
	Repeat
		Select WindowEvent() 
			Case #PB_Event_None
				Break
			Case #PB_Event_CloseWindow
				Break 2 
		EndSelect
	ForEver
	FlipBuffers() 
	ClearScreen(RGB(0, 0, 0))
	If StartDrawing(ScreenOutput())
		DrawText(10, 10, "Hallo Welt!", $FFFFFF, $000000)
		StopDrawing()
	EndIf
ForEver
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
northstarex
Beiträge: 103
Registriert: 25.08.2013 18:04
Computerausstattung: alles mögliche^^
Wohnort: Schöppenstedt
Kontaktdaten:

Re: 640x480 auf 1920x1080 strecken

Beitrag von northstarex »

hat geklappt das mit dem ResizeWindow :allright:
Nur.... wird beim stretchen das Größenseitenverhältnis nicht eingehalten. ein Bug evtl?
Konnte ich aber so lösen, dass ich ein angepasstes Window benutzt habe.

OpenWindow(1, 240, 0, 640, 480, "main", #PB_Window_BorderLess)
OpenWindowedScreen(WindowID(1), 0, 0, 640, 480, #True, 0, 0, #PB_Screen_WaitSynchronization)

ResizeWindow(1, 240, 0, 1440, 1080)

StartDrawing(ScreenOutput())
DrawImage(ImageID(2),0,0)
StopDrawing()

Kurioserweise musste ich links und recht den Leerbereich ausrechnen und in x (Wert 240) angeben, sonst wäre die Grafik wieder fehlerhaft angezeigt beim stretchen.


Ich dachte wirklich das, wenn man bei dem Befehl "If OpenWindowedScreen" die angegeben Pixelwerte automatisch an das zugrundelegende Window angepasst wird, wenn man die Funktion "Stretch" auf True setzt. Vielleicht könnte man den Befehl so noch erweitern, dass das "Größerziehen" auch gleich, und nicht erst beim manuellen Fenstervergrößern funktioniert. Auch das Größenseitenverhältnis beibehalten (auf Wunsch) wäre noch was.

Ist aber nur so ein Gedankengang von mir.
Bild
Antworten