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)

这样就完成了对保存后图像质量的一个控制,同样你也可以对其色深、压缩、转换等进行同样的操作。