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