Seite 1 von 1

Image anpassen [Erledigt]

Verfasst: 18.10.2007 20:54
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

Re: Image anpassen

Verfasst: 18.10.2007 21:02
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

Verfasst: 18.10.2007 21:17
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

Verfasst: 19.10.2007 19:26
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

Verfasst: 19.10.2007 21:17
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


Verfasst: 21.10.2007 10:49
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