2024年5月29日发(作者:)
VFP下GdipSaveImageToFile的参数设置
在进行GDI+绘图需要保存的时候,通常需要使用GdipSaveImageToFile来进行操作,该函数VFP下API
声明如下:
DECLARE INTEGER GdipSaveImageToFile IN ;
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
其中, 参数比较关键,常用的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}"
另外一个参数是设定值的内存地址。
例如,我们保存时要对一个图像的质量进行控制:
*示例需要的API声明
DECLARE INTEGER GdipSaveImageToFile IN ;
INTEGER nImage,;
STRING wFilename,;
STRING qEncoder,;
STring @nEncoderParamsPtr
DECLARE INTEGER CLSIDFromString IN ole32 STRING lpsz, STRING @pclsid
DECLARE INTEGER GdipLoadImageFromFile IN ;
STRING wFilename, INTEGER @nImage
DECLARE INTEGER StrDup IN shlwapi STRING @lpsz
LOCAL nImage as Integer
pSourceFileNAme=''
pNewFileNAme=''
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)
这样就完成了对保存后图像质量的一个控制,同样你也可以对其色深、压缩、转换等进行同样的操作。


发布评论