=ResizeImage("test.jpg","new.jpg",96,96)
PROCEDURE ResizeImage
LPARAMETERS cSourceImage,cOutputImage,nThumbWidth,nThumbHeight
#DEFINE GDIPLUS_PIXELFORMAT_32bppPARGB 0x000E200B
LOCAL oImage,oGraphics,oBitmap,nThumbWidth,nThumbHeight,nImgWidth,;
nImgHeight,nDestX,nDestY,nDestW,nDestH,m.nFact,nResizHeight,nSpace,nResizWidth
ogpPen = NEWOBJECT('gpPen', '_gdiplus.vcx')
ogpPen.Create(BITLSHIFT(16777215,24) + BITAND(16777215,0x00FF00) + ;
BITLSHIFT(16777215,16) + BITRSHIFT(16777215,16),2,2)
oGraphics.DrawImageScaled( oImage, 1,1, nW-2, nH-2)
oGraphics.DrawRectangle(oPen,0,0,96,96)
m.oImage = NEWOBJECT('gpImage','_gdiplus.vcx')
m.oImage.CreateFromFile(cSourceImage)
m.oBitmap = NEWOBJECT('gpBitmap','_gdiplus.vcx')
m.oGraphics = NEWOBJECT('gpGraphics','_gdiplus.vcx')
m.oBitmap.Create(nThumbWidth,nThumbHeight,GDIPLUS_PIXELFORMAT_32bppPARGB)
m.oGraphics.CreateFromImage(oBitmap)
m.nImgWidth=m.oImage.ImageWidth
m.nImgHeight=m.oImage.ImageHeight
DO case
CASE m.nImgWidth > m.nImgHeight
m.nFact=(m.nImgWidth-m.nThumbWidth)/m.nImgWidth
m.nResizHeight=m.nImgHeight-(m.nImgHeight*m.nFact)
m.nSpace=(nThumbHeight-m.nResizHeight)/2
m.nDestX=0
m.nDestY=m.nSpace
m.nDestW=m.nThumbWidth
m.nDestH=m.nResizHeight
CASE m.nImgWidth < m.nImgHeight
m.nFact=(m.nImgHeight-m.nThumbHeight)/m.nImgHeight
m.nResizWidth=m.nImgWidth-(m.nImgWidth*m.nFact)
m.nSpace=(nThumbWidth-m.nResizWidth)/2
m.nDestX=m.nSpace
m.nDestY=0
m.nDestW=m.nResizWidth
m.nDestH=m.nThumbHeight
CASE m.nImgWidth = m.nImgHeight
m.nDestX=0
m.nDestY=0
m.nDestW=m.nThumbWidth
m.nDestH=m.nThumbHeight
ENDCASE
m.oGraphics.DrawImageScaled(m.oImage, m.nDestX, m.nDestY, m.nDestW, m.nDestH)
m.oBitmap.SaveToFile(m.cOutputImage,"image/jpeg","quality=90")
ENDPROC
Original