Bild proportional skalieren

Für allgemeine Fragen zur Programmierung mit PureBasic.
Lambda
Beiträge: 526
Registriert: 16.06.2011 14:38

Bild proportional skalieren

Beitrag von Lambda »

Ich steh gerade auf dem Schlauch. Ich möchte ein Bild proportional skalieren damit es in ein Gadget mit einer bestimmten größe immer voll sichtbar reinpasst.

Gadget ist zb 200x400
Bild ist zb 3000x6000
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Bild proportional skalieren

Beitrag von STARGÅTE »

Breite/Höhe gibt dir das Seitenverhältnis.

Dan einfach die Höhe auf die Passende größe bringen und mal das Seitenverhältnis für die Breite rechnen.

Hier mal n Macro, was ResizeImage ersetzt und den Parameter #PB_Image_KeepAspectRatio hinzufügt:

Code: Alles auswählen

#PB_Image_KeepAspectRatio = %10

Procedure ResizeImageEx(Image.i, Width.i, Height.i, Mode.i=#PB_Image_Smooth)
	Protected AspectRatio.f
	If Mode & #PB_Image_KeepAspectRatio
		AspectRatio = ImageWidth(Image)/ImageHeight(Image)
		If Width/Height < AspectRatio
			ResizeImage(Image, Width, Width/AspectRatio, Mode&~#PB_Image_KeepAspectRatio)
		Else
			ResizeImage(Image, Height*AspectRatio, Height, Mode&~#PB_Image_KeepAspectRatio)
		EndIf
	Else
		ResizeImage(Image, Width, Height, Mode)
	EndIf
EndProcedure

Macro ResizeImage(Image, Width, Height, Mode=#PB_Image_Smooth)
	ResizeImageEx(Image, Width, Height, Mode)
EndMacro

;- Bespiel

Enumeration
	#Image
EndEnumeration

CreateImage(#Image, 200, 400)
ResizeImage(#Image, 600, 600, #PB_Image_KeepAspectRatio)
Debug ImageWidth(#Image)
Debug ImageHeight(#Image)

CreateImage(#Image, 400, 50)
ResizeImage(#Image, 600, 600, #PB_Image_KeepAspectRatio)
Debug ImageWidth(#Image)
Debug ImageHeight(#Image)
Wie du siehst, bleibt das Seitenverhältnis erhalten nur das Bild wird so weit wie möglich vergrößert.
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
Benutzeravatar
Frabbing
Beiträge: 160
Registriert: 15.02.2007 21:31
Kontaktdaten:

Re: Bild proportional skalieren

Beitrag von Frabbing »

Simple Dreisatz-Rechnung: http://de.wikipedia.org/wiki/Dreisatz

Hast du z.B. eine Bildgröße 800 x 600 Pixel und die neue Breite soll 500 sein, dann würde die neue Höhe so berechnet:

h = 500 x 600 / 800

Also

h = 375

Die neue Bildgröße wäre also 500 x 375 Pixel, wobei das Verhältnis zur originalen Größe gleich bliebe.
Gruß, Frank
Lambda
Beiträge: 526
Registriert: 16.06.2011 14:38

Re: Bild proportional skalieren

Beitrag von Lambda »

Danke euch beiden. Bin heute morgen auch noch darauf gekommen.. nach 12 Stunden arbeit knickt der Schlauch schon fast von allein ein. :coderselixir:
Antworten