图像编码的参数.pdf





《图像编码的参数.pdf》由会员分享,可在线阅读,更多相关《图像编码的参数.pdf(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、图像编码的参数通过 IGPImage.GetEncoderParameterList 可以获取指定编码格式的参数列表;通过此列表可以遍历出各参数的指针:PGPNativeEncoderParameter(TGPNativeEncoderParameter 的指针);TGPNativeEncoderParameter 是一个结构体:TGPNativeEncoderParameter=recordGuid:TGUID;参数标识 NumberOfValues:ULONG;参数数组的元素数 ValueType:TGPEncoderParameterValueType;参数类型 Value:Pointe
2、r;参数数据指针 end;/其中的 TGPEncoderParameterValueType 是个枚举,枚举值有:EncoderParameterValueTypeByte=1 字节数组 EncoderParameterValueTypeASCII=2 PAnsiChar EncoderParameterValueTypeShort=3 Word EncoderParameterValueTypeLong=4 Cardinal EncoderParameterValueTypeRational=5 Cardinal/Cardinal;第一个数是分子,第二个数是分母 EncoderParamet
3、erValueTypeLongRange=6 一对 Cardinal,表示一个数值范围 EncoderParameterValueTypeUndefined=7 可包含任何数据类型的字节数组 EncoderParameterValueTypeRationalRange=8四 个整 数:Cardinal/Cardinal,Cardinal/Cardinal EncoderParameterValueTypePointer=9 指针/EncoderParameterValueTypeRationalRange 中的四个整数通过分数运算得到的两个值:最小值.最大值.每个编码器的参数肯定会有区别,下面
4、代码获取了 JPEG 编码器所能支持的参数信息:uses GdiPlus;procedureTForm1.Button1Click(Sender:TObject);varImage:IGPImage;Parameters:IGPEncoderParameters;Param:PGPNativeEncoderParameter;beginImage:=TGPBitmap.Create(1,1);Parameters:=Image.GetEncoderParameterList(TGPImageFormat.Jpeg.CodecId);Memo1.Clear;for ParaminParamete
5、rs do with Memo1.Lines dobeginAdd(Format(Guid:%s,GUIDToString(Param.Guid);Add(Format(NumberOfValues:%d,Param.NumberOfValues);Add(Format(ValueType:%d,Ord(Param.ValueType);Add(Format(Value:$%p,Param.Value);Add(EmptyStr);end;end;(*结果:Guid:8D0EB2D1-A58E-4EA8-AA14-108074B7B6F9NumberOfValues:5ValueType:4V
6、alue:$00AD8190Guid:1D5BE4B5-FA4A-452D-9CDD-5DB35105E7EBNumberOfValues:1ValueType:6Value:$00AD81A4Guid:EDB33BCE-0266-4A77-B904-27216099E717NumberOfValues:0ValueType:3Value:$00AD81ACGuid:F2E455DC-09B3-4316-8260-676ADA32481CNumberOfValues:0ValueType:3Value:$00AD81AC*)IGPImage.GetEncoderParameterList 方法
7、得到的类型是:IGPEncoderParameters;IGPImage.Save 方法就有一个 IGPEncoderParameters 类型的默认参数,通过它可以传入编码参数.编码参数有很多类型,譬如 EncoderQuality 是决定图片压缩比率的.下面的例子在保存 JPG 文件时使用了三种不同的质量参数(压缩级别):uses GdiPlus;procedureTForm1.Button1Click(Sender:TObject);varPrams:IGPEncoderParameters;Image:IGPImage;Graphics:IGPGraphics;Quality:Inte
8、ger;beginChDir(C:GdiPlusImg);Image:=TGPImage.Create(GrapeBunch.bmp);Prams:=TGPEncoderParameters.Create;Quality:=1;Prams.Add(EncoderQuality,Quality);Image.Save(GrapeBunch_1.jpg,TGPImageFormat.Jpeg,Prams);Prams.Clear;Quality:=50;Prams.Add(EncoderQuality,Quality);Image.Save(GrapeBunch_50.jpg,TGPImageFo
9、rmat.Jpeg,Prams);Prams.Clear;Quality:=100;Prams.Add(EncoderQuality,Quality);Image.Save(GrapeBunch_100.jpg,TGPImageFormat.Jpeg,Prams);/显示Graphics:=TGPGraphics.Create(Handle);Image:=TGPImage.Create(GrapeBunch_1.jpg);Graphics.DrawImage(Image,10,10);Graphics.TranslateTransform(Image.Width+10,0);Image:=T
10、GPImage.Create(GrapeBunch_50.jpg);Graphics.DrawImage(Image,10,10);Graphics.TranslateTransform(Image.Width+10,0);Image:=TGPImage.Create(GrapeBunch_100.jpg);Graphics.DrawImage(Image,10,10);end;IGPEncoderParameters 的成员:IGPEncoderParameters.GetEnumerator;IGPEncoderParameters.Clear;IGPEncoderParameters.A
11、dd();IGPEncoderParameters.Count;IGPEncoderParameters.Param;IGPEncoderParameters.NativeParams;/其中的 Add 方法有多种重载,这便于添加各种类型的数据;参数类型常数:EncoderCompression 压缩 EncoderColorDepth 颜色深度 EncoderScanMethod 扫描方法 EncoderVersion 版本 EncoderRenderMethod 呈现方法 EncoderQuality 质量 EncoderTransformation 转换 EncoderLuminance
12、Table 亮度表 EncoderChrominanceTable 色度表 EncoderSaveFlag 保存标志 CodecIImageBytes 下面是 GDI+1.1 才开始支持的:EncoderColorSpaceEncoderImageItemsEncoderSaveAsCMYK五种编码器(BMP、JPEG、GIF、TIFF、PNG)分别能支持哪些参数类型呢?支持的参数类型的参数又是什么格式的呢?尽管 Add 方法已准备好了多种重载,用哪个呢?下面的程序列出了各种编码器的参数信息:uses GdiPlus;constParamValueTypeArr:array1.9 of str
13、ing=(ValueTypeByte,ValueTypeASCII,ValueTypeShort,ValueTypeLong,ValueTypeRational,ValueTypeLongRange,ValueTypeUndefined,ValueTypeRationalRange,ValueTypePointer);/自定义函数function GetGuidName(g:TGUID):string;vars:string;begins:=EmptyStr;ifIsEqualGUID(g,EncoderCompression)then s:=EncoderCompression;ifIsEq
14、ualGUID(g,EncoderColorDepth)then s:=EncoderColorDepth;ifIsEqualGUID(g,EncoderScanMethod)then s:=EncoderScanMethod;ifIsEqualGUID(g,EncoderVersion)then s:=EncoderVersion;ifIsEqualGUID(g,EncoderRenderMethod)then s:=EncoderRenderMethod;ifIsEqualGUID(g,EncoderQuality)then s:=EncoderQuality;ifIsEqualGUID(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图像 编码 参数

限制150内