关于VFP下GdipSaveImageToFile的参数设置
在进行GDI+绘图需要保存的时候,通常需要使用GdipSaveImageToFile来进行操作,该函数VFP下API声明如下:
DECLARE INTEGER GdipSaveImageToFile IN gdiplus.DLL ; INTEGER nImage,; STRING wFilename,; STRING qEncoder,; STring @nEncoderParamsPtr &&如果你想用指针的话可以定义为Long
参数1:nImage需要保存的GDI图像句柄 参数2:wFilename保存后的图像文件名称,宽字节格式 参数3:qEncodere保存后图像格式的GUID值,也就是初始化解码器的GUID标识 参数4:nEncoderParamsPtr 解码器参数设置
前两个参数都比较简单,第三个参数是图像格式解码器的GUID标识,如: #define CLSID_BMP "{557CF400-1A04-11D3-9A73-0000F81EF32E}" #define CLSID_JPEG "{557CF401-1A04-11D3-9A73-0000F81EF32E}" #define CLSID_GIF "{557CF402-1A04-11D3-9A73-0000F81EF32E}" #define CLSID_TIFF "{557CF405-1A04-11D3-9A73-0000F81EF32E}" #define CLSID_PNG "{557CF406-1A04-11D3-9A73-0000F81EF32E}"
第四个参数是一个EncoderParameters结构体,其结构定义如下:
Private Type EncoderParameters Count As Long &&EncoderParameter结构参数数量 Parameter As EncoderParameter End Type Private Type EncoderParameter GUID As GUID &&参数的GUID标识,如GUID_Compress、GUID_ColorDepth、GUID_Quality、GUID_Transform、GUID_SaveFlag等 NumberOfValues As Long &&参数数量 type As Long &&类型值,4 Value As Long &&参数值的内存地址 End Type
其中,EncoderParameter.GUID 参数比较关键,常用的GUID标识有压缩、色深、质量等等,该参数的常用定义如下:
#define GUID_Compress "{e09d739d-ccd4-44ee-8eba-3fbf8be4fc58}" #define GUID_ColorDepth "{66087055-ad66-4c7c-9a18-38a2310b8337}" #define GUID_Quality "{1d5be4b5-fa4a-452d-9cdd-5db35105e7eb}" #define GUID_Transform "{8d0eb2d1-a58e-4ea8-aa14-108074b7b6f9}" #define GUID_SaveFlag "{292266fc-ac40-47bf-8cfc-a85b89a655de}"
另外一个参数EncoderParameter.Value是EncoderParameter.GUID设定值的内存地址。
例如,我们保存时要对一个图像的质量进行控制:
*示例需要的API声明
DECLARE INTEGER GdipSaveImageToFile IN gdiplus.DLL ; INTEGER nImage,; STRING wFilename,; STRING qEncoder,; STring @nEncoderParamsPtr
DECLARE INTEGER CLSIDFromString IN ole32 STRING lpsz, STRING @pclsid
DECLARE INTEGER GdipLoadImageFromFile IN gdiplus.DLL ; STRING wFilename, INTEGER @nImage
DECLARE INTEGER StrDup IN shlwapi STRING @lpsz
****************************************************** *** VFP应用程式算法群 QQ群号:12787940 *** ******************************************************
LOCAL nImage as Integer pSourceFileNAme='in.png' pNewFileNAme='out.png' cInput = PADR(CHR(1), 16, CHR(0)) GdipLoadImageFromFile(STRCONV(pSourceFileNAme+CHR(0),5),@nImage)
GUID_FormatJPG="{557CF401-1A04-11D3-9A73-0000F81EF32E}" lcEncode = REPLICATE(CHR(0),16) CLSIDFromString(STRCONV(GUID_FormatJPG+CHR(0),5),@lcEncode)&&这里定义保存后的图像格式为JPG
lcGuid = REPLICATE(CHR(0),16) GUID_Quality="{1d5be4b5-fa4a-452d-9cdd-5db35105e7eb}"&&对图像质量进行操作 CLSIDFromString(STRCONV(GUID_Quality+CHR(0),5),@lcGuid) Quality=50&&图像质量值设置 QualityStr=BINTOC(Quality,'4rs') ValuePtr=StrDup(@QualityStr)&&得到图像质量设置值的内存地址 EncoderParameter=lcGuid+BINTOC(1,'4rs')+BINTOC(4,'4rs')+BINTOC(ValuePtr,'4rs') EncoderParameters=bintoc(1,'4rs')+EncoderParameter GdipSaveImageToFile(nImage,STRCONV(pNewFileNAme+CHR(0),5),lcEncode,@EncoderParameters)
这样就完成了对保存后图像质量的一个控制,同样你也可以对其色深、压缩、转换等进行同样的操作。
转载 http://hi.baidu.com/myvfp/blog/item/093d97f47bb575e27609d7a2.html