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
Image anpassen [Erledigt]
- 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]
Zuletzt geändert von Elektrolurch am 21.10.2007 10:50, insgesamt 1-mal geändert.
Re: Image anpassen
> 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
> man mit Scrollleisten darin navigieren kann.
da böte sich ein ScrollAreaGadget an...
Grüße ... Kiffi
a²+b²=mc²
- Elektrolurch
- Beiträge: 168
- Registriert: 11.10.2007 16:48
- Wohnort: 49°26'51.46"N - 8°59'49.06"E
- Kontaktdaten:
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:
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
- Elektrolurch
- Beiträge: 168
- Registriert: 11.10.2007 16:48
- Wohnort: 49°26'51.46"N - 8°59'49.06"E
- Kontaktdaten:
Hi
Danke für alle Info's, mittlerweile funktionierts zufriedenstellend.
Wen's interessiert hier mein Code
Tschau Andre
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