The first demo shows how to scale drawn graphics to the size desired. The second demo shows how to display a loaded bitmap in any desired dimensions. It can be sized to fill a graphicbox, if desired.
Resizing Drawn Graphics
'scale drawn graphics to fill box
'Alyce Watson, August 2003
'API functions from LB Workshop
'http://alycesrestaurant.com/workshop.htm
nomainwin
swide=500 'desired image width
shigh=350 'desired image height
bwide=100 'current image width
bhigh=100 'current image height
WindowWidth=504:WindowHeight=396
graphicbox #1.g, 0,0,502,352
menu #1, "&File","&Stretch",[stretch],"E&xit",[quit]
Open "Graphics Scaler" for window_nf as #1
#1 "trapclose [quit]"
#1.g "down; fill blue; color red;size 2"
#1.g "backcolor cyan; place 50 50"
#1.g "circlefilled 50;flush"
'get DC of graphicbox
gDC=GetDC(hwnd(#1.g))
wait
[stretch]
if stretchedFlag=1 then
notice "Image has already been stretched."
wait
end if
'display in graphicbox, scaled
call StretchBlt gDC,0,0,swide,shigh,gDC,0,0,bwide,bhigh
'use getbmp to get and flush the stretched graphics
#1.g "segment segID"
#1.g "getbmp pix 0 0 ";swide;" ";shigh
#1.g "drawbmp pix 0 0; flush"
#1.g "delsegment ";segID
#1.g "discard"
stretchedFlag=1
wait
[quit]
call ReleaseDC hwnd(#1.g), gDC
close #1:end
Function GetDC(hWnd)
CallDLL #user32, "GetDC",_
hWnd As Long,_ 'window or control handle
GetDC As Long 'returns device context
End Function
Sub ReleaseDC hWnd, hDC
CallDLL#user32,"ReleaseDC",_
hWnd As Long,_ 'window or control handle
hDC As Long,_ 'handle of DC to delete
result As Long
End Sub
Sub StretchBlt hDCdest,x,y,w,h,hDCsrc,x2,y2,w2,h2
CallDLL #gdi32, "SetStretchBltMode",_
hDCdest As Long,_ 'device context
_COLORONCOLOR As Long,_ 'color reduction mode
RESULT As Long
CallDLL #gdi32, "StretchBlt",_
hDCdest As Long,_ 'destination
x As Long,_ 'destination x pos
y As Long,_ 'destination y pos
w As Long,_ 'destination width desired
h As Long,_ 'destination height desired
hDCsrc As Long,_ 'source
x2 As Long,_ 'x location to start from source
y2 As Long,_ 'y location to start from source
w2 As Long,_ 'width desired from source
h2 As Long,_ 'height desired from source
_SRCCOPY As Ulong,_ 'dwRasterOperation
RESULT As Boolean
End Sub
Displaying a Bitmap Resized
'scale bitmap to fill box
'Alyce Watson, August 2003
'API functions from LB Workshop
'http://alycesrestaurant.com/workshop.htm
nomainwin
swide=500 'desired image width
shigh=350 'desired image height
WindowWidth=504:WindowHeight=396
graphicbox #1.g, 0,0,502,352
menu #1, "&File","&Open",[open],"E&xit",[quit]
Open "Graphics Scaler" for window_nf as #1
#1 "trapclose [quit]"
'get DC of graphicbox
gDC=GetDC(hwnd(#1.g))
'create memory DC
mDC=CreateCompatibleDC(gDC)
wait
[open]
filedialog "Open","*.bmp",bmp$
if bmp$="" then wait
'unload previous image, if there is one
if hBitmap<>0 then unloadbmp "bitmap"
'load bitmap
loadbmp "bitmap",bmp$
'get handle of bitmap
hBitmap=hbmp("bitmap")
'get dimensions of image
bwide=BitmapWidth(hBitmap)
bhigh=BitmapHeight(hBitmap)
'select bmp into memory DC
oldBmp=SelectObject(mDC,hBitmap)
'display in graphicbox, scaled
call StretchBlt gDC,0,0,swide,shigh,mDC,0,0,bwide,bhigh
wait
[quit]
if hBitmap<>0 then unloadbmp "bitmap"
call ReleaseDC hwnd(#1.g), gDC
call DeleteDC mDC
close #1:end
Function GetDC(hWnd)
CallDLL #user32, "GetDC",_
hWnd As Long,_ 'window or control handle
GetDC As Long 'returns device context
End Function
Sub ReleaseDC hWnd, hDC
CallDLL#user32,"ReleaseDC",_
hWnd As Long,_ 'window or control handle
hDC As Long,_ 'handle of DC to delete
result As Long
End Sub
Function CreateCompatibleDC(hDC)
CallDLL #gdi32,"CreateCompatibleDC",_
hDC As Long,_ 'window DC
CreateCompatibleDC As Long 'memory DC
End Function
Sub DeleteDC hDC
CallDLL #gdi32, "DeleteDC",_
hDC As Long,_ 'memory DC to delete
r As Boolean
End Sub
Sub StretchBlt hDCdest,x,y,w,h,hDCsrc,x2,y2,w2,h2
CallDLL #gdi32, "SetStretchBltMode",_
hDCdest As Long,_ 'device context
_COLORONCOLOR As Long,_ 'color reduction mode
RESULT As Long
CallDLL #gdi32, "StretchBlt",_
hDCdest As Long,_ 'destination
x As Long,_ 'destination x pos
y As Long,_ 'destination y pos
w As Long,_ 'destination width desired
h As Long,_ 'destination height desired
hDCsrc As Long,_ 'source
x2 As Long,_ 'x location to start from source
y2 As Long,_ 'y location to start from source
w2 As Long,_ 'width desired from source
h2 As Long,_ 'height desired from source
_SRCCOPY As Ulong,_ 'dwRasterOperation
RESULT As Boolean
End Sub
Function BitmapWidth(Hbmp)
struct BITMAP,_
bmType As Long,_
bmWidth As Long,_
bmHeight As Long,_
bmWidthBytes As Long,_
bmPlanes As Word,_
bmBitsPixel As Word,_
bmBits As Long
nSize=Len(BITMAP.struct)
CallDLL #gdi32, "GetObjectA", Hbmp As Long,_
nSize As Long,BITMAP As struct,_
results As Long
BitmapWidth=BITMAP.bmWidth.struct
End Function
Function BitmapHeight(Hbmp)
struct BITMAP,_
bmType As Long,_
bmWidth As Long,_
bmHeight As Long,_
bmWidthBytes As Long,_
bmPlanes As Word,_
bmBitsPixel As Word,_
bmBits As Long
nSize=Len(BITMAP.struct)
CallDLL #gdi32, "GetObjectA", Hbmp As Long,_
nSize As Long,BITMAP As struct,_
results As Long
BitmapHeight=BITMAP.bmHeight.struct
End Function
Function SelectObject(hDC,hObject)
CallDLL #gdi32,"SelectObject",_
hDC As Long,_ 'memory device context
hObject As Long,_ 'handle of object
SelectObject As Long 'returns previously selected object
End Function