关于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.ValueEncoderParameter.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

posted on 2012-03-27 15:23  Juneson  阅读(1363)  评论(0编辑  收藏  举报

导航