Image anpassen [Erledigt]

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Elektrolurch
Beiträge: 168
Registriert: 11.10.2007 16:48
Wohnort: 49°26'51.46"N - 8°59'49.06"E
Kontaktdaten:

Image anpassen [Erledigt]

Beitrag von Elektrolurch »

Hi
Ich bin gerade dabei ein Program in Purebasic zu schreiben.
Dabei habe ich ein Image Gadget eingebaut um mir die Bilder anzuzeigen, die ich übertragen will.
Mein Problem ist, dass ich das Gadget so dimensioniert habe, dass es in meine Form paßt.
Leider sind nicht alle Bilder gleich groß, so daß sich manche im vorgesehene Feld verlieren, damit kann ich leben.
Was jedoch stört ist, wenn sie größer als der Rahmen sind, dann überdecken sie den Rest des Formulars.
Gibt es da irgend einen Trick, mit dem man die Grafik zoomen kann.
Oder, dass das Bild hinter dem Rahmen liegt und man mit Scrollleisten darin navigieren kann.
Oder irgend eine andere Idee?
Tschau
Zuletzt geändert von Elektrolurch am 21.10.2007 10:50, insgesamt 1-mal geändert.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Image anpassen

Beitrag von Kiffi »

> Oder, dass das Bild hinter dem Rahmen liegt und
> man mit Scrollleisten darin navigieren kann.


da böte sich ein ScrollAreaGadget an...

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

..womit du zu kleine bilder sogar zentriert darstellen lassen kannst.
ansonsten gibts auch ResizeImage(). du könntest dafür jedes bild kopieren, damit die eigentlichen bilder nicht verändert werden, und dann diese kopien als thumbnails zum anzeigen in gleicher grösse verwenden
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
Elektrolurch
Beiträge: 168
Registriert: 11.10.2007 16:48
Wohnort: 49°26'51.46"N - 8°59'49.06"E
Kontaktdaten:

Beitrag von Elektrolurch »

Hi
Ich werde am Wochenende mal eure Ideen ausprobieren.
Alternativ habe ich mir überlegt könnte ich für die Ansicht ja auch ein neues Fenster öffnen das man nach dem Betrachten wieder schließt.
Ist zwar nicht elegant.

Danke schon Mal

Wer noch ne Idee hat, bin für jede Idee Dankbar
Benutzeravatar
Ligatur
Beiträge: 196
Registriert: 09.07.2006 00:41

Beitrag von Ligatur »

Hallo,

Du könntest auch auf das Imagegadget ganz verzichten und das Bild mit DrawImage im Fenster zeichnen wenn die Nachricht #PB_Event_Repaint auftritt, wenn du dabei die Parameter NeueBreite und NeueHöhe benutzt kannst du das Image beliebig positionieren und zoomen. Beispiel:

Code: Alles auswählen

UseJPEGImageDecoder()

hwnd = OpenWindow(0, 0, 0, 640, 480, "Imageview", #WS_OVERLAPPEDWINDOW)
CreateGadgetList(hwnd)
ButtonGadget(0, 5, 5, 80, 25, "Laden")

Repeat
	event = WaitWindowEvent()
	
	Select event
		Case #PB_Event_Gadget
			If EventGadget() = 0
				Datei.s = OpenFileRequester("Bild laden", "", "Bilder|*.jpg;*.bmp", 0)
				If Datei <> ""
					LoadImage(0, Datei)
				EndIf
				; Neue an das Fenster angepasste Dimensionen berechnen
				wi = ImageWidth(0)
				ww = WindowWidth(0)
				hi = ImageHeight(0)
				hw = WindowHeight(0)
				If wi > ww - 10
					wn = ww - 10
					hi = hi * wn / wi
					wi = wn
				EndIf
				If hi > (hw - 40)
					hn = hw - 40
					wi = wi * hn / hi
					hi = hn
				EndIf
			EndIf


		Case #PB_Event_SizeWindow
			If IsImage(0)
				wi = ImageWidth(0)
				ww = WindowWidth(0)
				hi = ImageHeight(0)
				hw = WindowHeight(0)
				If wi > (ww - 10)
					wn = ww - 10
					hi = hi * wn / wi
					wi = wn
				EndIf
				If hi > (hw - 40)
					hn = hw - 40
					wi = wi * hn / hi
					hi = hn
				EndIf
			EndIf
			InvalidateRect_(hwnd, 0, #True)	; Hintergrund löschen. Muß bei nicht - Windows - Systemen anders gelöst werden
			
		Case #PB_Event_Repaint
			If IsImage(0)
				StartDrawing(WindowOutput(0))
					DrawImage(ImageID(0), 5, 35, wi, hi)
				StopDrawing()
			EndIf
	EndSelect
Until event = #PB_Event_CloseWindow

Benutzeravatar
Elektrolurch
Beiträge: 168
Registriert: 11.10.2007 16:48
Wohnort: 49°26'51.46"N - 8°59'49.06"E
Kontaktdaten:

Beitrag von Elektrolurch »

Hi
Danke für alle Info's, mittlerweile funktionierts zufriedenstellend.
Wen's interessiert hier mein Code

Code: Alles auswählen

Datei.s = OpenFileRequester("Bild laden", "", "Bilder|*.jpg;*.bmp;*.png", 0) 
      SetGadgetText(#ThemeFile, Datei)
            If Datei <> ""     
              LoadImage(0, Datei,#PB_Image_DisplayFormat) 
              wi = ImageWidth(0) 
              ww = 200 
              hi = ImageHeight(0) 
              hw = 125 
            If wi > ww - 10 
              wn = ww - 10 
              hi = hi * wn / wi 
              wi = wn 
            EndIf 
            If hi > (hw - 10) 
              hn = hw - 10 
              wi = wi * hn / hi 
              hi = hn 
            EndIf 
            ResizeImage(0, wi, hi,#PB_Image_Smooth) 
            ImageGadget(0, 150, 25, wi, hi, ImageID(0),#PB_Image_Border) 
            Else   
            MessageRequester("Fehler", "Keine Datei gewählt",#PB_MessageRequester_Ok )
            EndIf

Tschau Andre
Antworten