What about a simple solution like this ?
Strict
Graphics 640, 480, 0
SetClsColor 166, 166, 166
'make us an image for demonstration purpose
SetBlend SOLIDBLEND
SetMaskColor 0, 0, 0
SetColor 255, 0, 0
DrawRect 0, 0, 64, 64
SetColor 255, 255, 255
DrawRect 64, 0, 64, 64
SetColor 0, 0, 255
DrawRect 0, 64, 64, 64
SetColor 255, 255, 0
DrawRect 64, 64, 64, 64
Local curImgHandle:TImage =CreateImage(128, 128, 1, DYNAMICIMAGE | MASKEDIMAGE)
GrabImage curImgHandle, 0, 0
SetBlend ALPHABLEND
SetColor 255, 255, 255
Local offsetX:Int =47
Local offsetY:Int =37
Repeat
Cls
DrawText "original image", 75, 80
DrawImage curImgHandle, 75, 100
DrawText "image drawn as 32 x 32 from :" +offsetX +", "+offsetY, 250, 80
DrawText "(use arrow keys and home to change display)", 250, 150
SetViewport 250, 100, 32, 32 'desired location and with of images displayed part
DrawImage curImgHandle, 250 -offsetX, 100 -offsetY
'change displayed part of image
If KeyDown(KEY_LEFT) Then
offsetX :-1
ElseIf KeyDown(KEY_RIGHT) Then
offsetX :+1
ElseIf KeyDown(KEY_UP) Then
offsetY :-1
ElseIf KeyDown(KEY_DOWN) Then
offsetY :+1
ElseIf KeyDown(KEY_HOME) Then
offsetX =47
offsetY =37
End If
offsetX =Abs(offsetX Mod (128 -32))
offsetY =Abs(offsetY Mod (128 -32))
SetViewport 0, 0, 640, 480
Flip
Until KeyHit(KEY_ESCAPE)