Need a test with this...

BlitzMax Forums/BlitzMax Beginners Area/Need a test with this...

The forum is locked. These are the original blitzbasic.com forums, kept so they can still be read. No new topics, replies or edits can be made here. To join in, head over to the Blitz3D+ forums.

Oh dear...Have you even tried your own code?...
Strict

Graphics 800, 600, 32

Local img:TImage = LoadImage("bmlogo.png", 0)' A 257x257 image

SetClsColor 0, 0, 200

Cls

DrawImage img, 0, 12
DrawImageAreaMe img, 260, 12, 0, 0, 128, 128
DrawImageAreaDream img, 520, 12, 128, 128, 0, 0, 128, 128 

DrawText "Full", 12, 0
DrawText "My Quarter", 270, 0
DrawText "Dreamora's Quarter", 520, 0   

Flip

WaitKey()

End


Function DrawImageAreaMe(image:TImage, x#, y#, rx#, ry#, rw#, rh#, frame:Int=0)
	Local origin_x#, origin_y# ; GetOrigin (origin_x, origin_y)
	Local tw = Pow2Size(image.width)
	Local th = Pow2Size(image.height)
	Local rw1#	= rx + rw
	Local rh1#	= ry + rh
	Local x0# = -image.handle_x, x1# = x0 + rw
	Local y0# = -image.handle_y, y1# = y0 + rh
	
	If rw1 > image.width
		x1 = x0 + rw + image.width - rw1
		rw1 = image.width
	EndIf
	 
	If rh1 > image.height
		y1 = y0 + rh + image.height - rh1
		rh1 = image.height
	EndIf
?Win32
	If TD3D7ImageFrame(image.frame(frame))
		Local frame:TD3D7ImageFrame	= TD3D7ImageFrame(image.frame(frame))
		
		frame.setUV(rx / tw, ry / th, rw1 / tw, rh1 / th)
		frame.Draw x0, y0, x1, y1, x + origin_x, y + origin_y
		frame.setUV(0, 0, image.width / Float(tw), image.height / Float(th))
	Else
?
		Local frame:TGLImageFrame = TGLImageFrame (image.frame(frame))
								
		frame.u0 = rx / tw
		frame.v0 = ry / th
		frame.u1 = rw1 / tw
		frame.v1 = rh1 / th
		
		frame.Draw x0, y0, x1, y1, x + origin_x, y + origin_y
		
		frame.u0 = 0
		frame.v0 = 0
		frame.u1 = image.width / Float(tw)
		frame.v1 = image.height / Float(th)
?Win32
	EndIf
?
	
	Function Pow2Size(n)
		Local ry = 1
		
		While ry < n
			ry :* 2
		Wend
		
		Return ry
	End Function
End Function

Function DrawImageAreaDream(image:TImage, x#, y#, dw#, dh#, l#, t#, w#, h#, frame:Int=0)
	Local origin_x#,origin_y#
	GetOrigin (origin_x,origin_y)
	Local l1#	= l + w
	Local h1#	= t + h
	Local x0#=-image.handle_x,x1#=x0+w
	Local y0#=-image.handle_y,y1#=y0+h

	If l1 > image.width
		x1 = x0 + w + image.width - l1
		l1 = image.width
	EndIf 
	If h1 > image.height
		y1 = y0 + h + image.height - h1
		h1 = image.height
	EndIf

	If TGLImageFrame (image.frame(frame))
		Local frame:TGLImageFrame 	= TGLImageFrame (image.frame(frame))
								
		frame.u0 = l / image.width
		frame.v0 = t / image.height
		frame.u1 = (l1) / image.width
		frame.v1 = (h1) / image.height
		frame.Draw x0,y0,x0+dw,y0+dh,x+origin_x,y+origin_y
		
		frame.u0	= 0
		frame.v0	= 0
		frame.u1	= 1
		frame.v1	= 1
	Else
		Local frame:TD3D7ImageFrame	= TD3D7ImageFrame(image.frame(frame))
		frame.setUV (l/image.width, t/image.height, (l1) / image.width, (h1) / image.height)
		frame.Draw x0,y0,x0+dw,y0+dh,x+origin_x,y+origin_y
		frame.setUV (0,0,1,1)
	EndIf
	
End Function

Using this image, I get this.