Seite 1 von 1

640x480 auf 1920x1080 strecken

Verfasst: 30.01.2021 15:13
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

Re: 640x480 auf 1920x1080 strecken

Verfasst: 30.01.2021 15:58
von Mijikai

Re: 640x480 auf 1920x1080 strecken

Verfasst: 30.01.2021 17:32
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

Re: 640x480 auf 1920x1080 strecken

Verfasst: 31.01.2021 17:29
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.