使用GDI对图片文件进行缩放
FUNCTION resizeimage(pSourceFileNAme as String,pNewFileNAme as String,nHeight as long)
*******************************************
算法制作:行者孙(QQ:310727570)
*******************************************
VFP应用程式算法群:12787940
*******************************************
****pSourceFileNAme 原始图片文件名
****pNewFileNAme 缩略图片文件名
****nHeight 缩略图片高度(缩略图的宽度是根据原始图片比例来计算的)
DECLARE INTEGER GdiplusStartup IN gdiplus;
INTEGER @token, STRING @INPUT, INTEGER OUTPUT
DECLARE INTEGER GdipGetImageHeight IN gdiplus;
INTEGER img,;
INTEGER @ imgheight
DECLARE INTEGER GdipGetImageWidth IN gdiplus;
INTEGER img,INTEGER @ imgwidth
DECLARE INTEGER GdipLoadImageFromFile IN gdiplus.DLL ;
STRING wFilename, INTEGER @nImage
DECLARE INTEGER GdipDrawImageRect IN gdiplus.DLL ;
INTEGER nGraphics, INTEGER nImage, SINGLE,SINGLE,SINGLE,SINGLE
DECLARE INTEGER GdipCreateBitmapFromScan0 IN gdiplus.DLL ;
INTEGER nWidth, INTEGER nHeight, INTEGER nStride,;
INTEGER nPixelFormat,STRING @ cScan0, INTEGER @ nImage
DECLARE INTEGER GdipGetImageGraphicsContext IN gdiplus.DLL ;
INTEGER nImage, INTEGER @ nGraphics
DECLARE INTEGER CLSIDFromString IN ole32 STRING lpsz, STRING @pclsid
DECLARE INTEGER GdipSaveImageToFile IN gdiplus.DLL ;
INTEGER nImage, STRING wFilename, STRING qEncoder, INTEGER nEncoderParamsPtr
DECLARE INTEGER GdiplusShutdown IN gdiplus INTEGER token
#DEFINE GDIPLUS_PIXELFORMAT_32bppARGB 0x0026200A
STORE 0 TO hToken,nImage,nGraphics,nBitmap,nWidth,uWidth,uHeight
cInput = PADR(CHR(1), 16, CHR(0))
GdiplusStartup(@hToken, @cInput, 0)
GdipLoadImageFromFile(STRCONV(pSourceFileNAme+CHR(0),5),@nImage)
GdipGetImageHeight(nImage,@uHeight)
GdipGetImageWidth(nImage,@uWidth)
nWidth=uWidth*(nHeight/uHeight)&&同比变比
GdipCreateBitmapFromScan0(nWidth,nHeight,0,GDIPLUS_PIXELFORMAT_32bppARGB, 0, @nBitmap)
GdipGetImageGraphicsContext (nBitmap, @nGraphics)
GdipDrawImageRect(nGraphics,nImage,0,0,nWidth, nHeight)
lcEncoder = REPLICATE(CHR(0),16)
CLSIDFromString(STRCONV("{557CF401-1A04-11D3-9A73-0000F81EF32E}"+CHR(0),5),@lcEncoder)
GdipSaveImageToFile (nBitmap, STRCONV(pNewFileNAme,5)+CHR(0),lcEncoder,0)
GdiplusShutdown(hToken)
ENDFUNC