ImageResize unter Einbehaltung des Seitenverhältnisses
Verfasst: 05.06.2006 12:49
Hi
Wie die Überschrift schon sagt, such ich ne Möglichkeit ein Bild so zu resizen das das Seitenverhältniss einbehalten wird.
Hab nenn Code Schnipsel ergoogelt doch den blick ich nicht(generell noch kein Plan von Prozeduren, wo sie hinkommen usw), was mir viel mehr nützen würde, währe die Formel
mit der man das Berechnet.
Bei diesem Code Schnipsel hab ich keine Ahnung, wo was welche ID hat(geschweige den welche ID das Bild nun hat), der Gesammte Aufbau ist für mich Noob unverständlich, mehrere Befehle pro Zeile bringen mich durcheinander auch wenn es platzsparend sein mag.
Hab aus nem uralt Tut gelernt, und mir alles ohne Enumeration angewöhnt, d:h ist meine Syntax extrem Noob mäßig.
Wie die Überschrift schon sagt, such ich ne Möglichkeit ein Bild so zu resizen das das Seitenverhältniss einbehalten wird.
Hab nenn Code Schnipsel ergoogelt doch den blick ich nicht(generell noch kein Plan von Prozeduren, wo sie hinkommen usw), was mir viel mehr nützen würde, währe die Formel
mit der man das Berechnet.
Code: Alles auswählen
;This is the aparently magic yet so easy way to do it
;I use this to get the proper width/height for image resizing and movie resizing etc.
Procedure AspectSize(source_w,source_h,*dest_w,*dest_h)
Protected aspect.f,w.l,h.l,width.l,height.l
If source_w=0 Or source_h=0 Or *dest_w=0 Or *dest_h=0 : ProcedureReturn : EndIf
width=PeekL(*dest_w)
height=PeekL(*dest_h)
aspect.f=source_w/source_h
w.l=width
h.l=width/aspect
If h>height
w=height*aspect
h=height
EndIf
PokeL(*dest_w,w)
PokeL(*dest_h,h)
EndProcedure
;Example use code grabbed from a recent forum post, and slightly modified.
If OpenWindow(0,300,30,600,400,#PB_Window_SystemMenu,"test")
UseJPEGImageEncoder()
CreateGadgetList(WindowID())
ImageGadget(0,0,0,WindowWidth(),WindowHeight(),0)
Repeat
ev=WindowEvent()
If GetAsyncKeyState_(#VK_SNAPSHOT)<>0 : If ev=0 : Delay(1) : EndIf
GetWindowRect_(GetForegroundWindow_(),win.RECT)
x=win\left : y=win\top : w=win\right-win\left : h=win\bottom-win\top
dm.DEVMODE : srcDC=CreateDC_("DISPLAY","","",dm) : trgDC=CreateCompatibleDC_(srcDC)
bm=CreateCompatibleBitmap_(srcDC,w,h) : SelectObject_(trgDC,bm) : BitBlt_(trgDC,0,0,w,h,srcDC,x,y,#SRCCOPY)
DeleteDC_(trgDC) : ReleaseDC_(bm,srcDC) : CreateImage(0,w,h)
StartDrawing(ImageOutput()) : DrawImage(bm,0,0) : StopDrawing()
w_new.l=WindowWidth()
h_new.l=WindowHeight()
AspectSize(w,h,@w_new,@h_new)
ResizeImage(0,w_new,h_new)
SetGadgetState(0,UseImage(0))
Delay(500)
EndIf
Until ev=#PB_EventCloseWindow
EndIf
Hab aus nem uralt Tut gelernt, und mir alles ohne Enumeration angewöhnt, d:h ist meine Syntax extrem Noob mäßig.
Code: Alles auswählen
If OpenWindow(0,0,0,800,600,#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered,"BlaBla ")
UseJPEGImageEncoder()
UseJPEGImageDecoder()
CreateGadgetList(WindowID(0))
LoadImage(0, "C:\test.jpg")
ButtonGadget(20,200,10,100,20,"Start")
CloseGadgetList()
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_Gadget
If EventGadgetID()=20
ImageGadget(1, 10, 30, 400, 300,UseImage(0))
Breite = ImageWidth()
Hoehe= ImageHeight()
W_1 = ImageWidth()
H_1 = ImageHeight()
If Breite < 1000
Hanso1=W_1
Else
Hanso1=Breite/4
EndIf
If Hoehe < 750
Hanso2=H_1
Else
Hanso2=Hoehe/3
EndIf
CopyImage(0, 10)
ResizeImage(10, Hanso1, Hanso2)
SaveImage(10, "C:\RESIZE.jpg", #PB_ImagePlugin_JPEG, 10)
EndIf
EndIf
Until EventID = #PB_Event_CloseWindow
EndIf
End