当前位置: 首页 > news >正文

网络公司 营销型网站广东短视频seo营销

网络公司 营销型网站,广东短视频seo营销,建设网站图片高清,澳洲同城app下载为什么80%的码农都做不了架构师?>>> 通过 IGPImage.GetEncoderParameterList 可以获取指定编码格式的参数列表; 通过此列表可以遍历出各参数的指针: PGPNativeEncoderParameter(TGPNativeEncoderParameter 的指针); TGPNativeEncoderParameter 是一个结…

为什么80%的码农都做不了架构师?>>>   hot3.png


通过 IGPImage.GetEncoderParameterList 可以获取指定编码格式的参数列表;

通过此列表可以遍历出各参数的指针: PGPNativeEncoderParameter(TGPNativeEncoderParameter 的指针);

TGPNativeEncoderParameter 是一个结构体:
TGPNativeEncoderParameter = recordGuid: TGUID;                              { 参数标识 }NumberOfValues: ULONG;                    { 参数数组的元素数 }ValueType: TGPEncoderParameterValueType;  { 参数类型 }Value: Pointer;                           { 参数数据指针 }
end;//其中的 TGPEncoderParameterValueType 是个枚举, 枚举值有:
EncoderParameterValueTypeByte          = 1 { 字节数组 }
EncoderParameterValueTypeASCII         = 2 { PAnsiChar }
EncoderParameterValueTypeShort         = 3 { Word }
EncoderParameterValueTypeLong          = 4 { Cardinal }
EncoderParameterValueTypeRational      = 5 { Cardinal/Cardinal; 第一个数是分子, 第二个数是分母 }
EncoderParameterValueTypeLongRange     = 6 { 一对 Cardinal, 表示一个数值范围 }
EncoderParameterValueTypeUndefined     = 7 { 可包含任何数据类型的字节数组 }
EncoderParameterValueTypeRationalRange = 8 { 四个整数: Cardinal/Cardinal, Cardinal/Cardinal }
EncoderParameterValueTypePointer       = 9 { 指针 }//EncoderParameterValueTypeRationalRange 中的四个整数通过分数运算得到的两个值: 最小值...最大值.

每个编码器的参数肯定会有区别, 下面代码获取了 JPEG 编码器所能支持的参数信息:
uses GdiPlus;procedure TForm1.Button1Click(Sender: TObject);
varImage: IGPImage;Parameters: IGPEncoderParameters;Param: PGPNativeEncoderParameter;
beginImage := TGPBitmap.Create(1, 1);Parameters := Image.GetEncoderParameterList(TGPImageFormat.Jpeg.CodecId);Memo1.Clear;for Param in Parameters 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-108074B7B6F9}NumberOfValues: 5ValueType: 4Value: $00AD8190Guid: {1D5BE4B5-FA4A-452D-9CDD-5DB35105E7EB}NumberOfValues: 1ValueType: 6Value: $00AD81A4Guid: {EDB33BCE-0266-4A77-B904-27216099E717}NumberOfValues: 0ValueType: 3Value: $00AD81ACGuid: {F2E455DC-09B3-4316-8260-676ADA32481C}NumberOfValues: 0ValueType: 3Value: $00AD81AC
*)

IGPImage.GetEncoderParameterList 方法得到的类型是: IGPEncoderParameters;

IGPImage.Save 方法就有一个 IGPEncoderParameters 类型的默认参数, 通过它可以传入编码参数.

编码参数有很多类型, 譬如 EncoderQuality 是决定图片压缩比率的.

下面的例子在保存 JPG 文件时使用了三种不同的质量参数(压缩级别):

26153149_Vnao.png

uses GdiPlus;procedure TForm1.Button1Click(Sender: TObject);
varPrams: IGPEncoderParameters;Image: IGPImage;Graphics: IGPGraphics;Quality: Integer;
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', TGPImageFormat.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 := TGPImage.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.Add();
IGPEncoderParameters.Count;
IGPEncoderParameters.Param[];
IGPEncoderParameters.NativeParams;//其中的 Add 方法有多种重载, 这便于添加各种类型的数据; 参数类型常数:
EncoderCompression      { 压缩 }
EncoderColorDepth       { 颜色深度 }
EncoderScanMethod       { 扫描方法 }
EncoderVersion          { 版本 }
EncoderRenderMethod     { 呈现方法 }
EncoderQuality          { 质量 }
EncoderTransformation   { 转换 }
EncoderLuminanceTable   { 亮度表 }
EncoderChrominanceTable { 色度表 }
EncoderSaveFlag         { 保存标志 }
CodecIImageBytes        {  }
{ 下面是 GDI+1.1 才开始支持的: }
EncoderColorSpace       {  }
EncoderImageItems       {  }
EncoderSaveAsCMYK       {  }

五种编码器(BMP、JPEG、GIF、TIFF、PNG)分别能支持哪些 "参数类型" 呢?
支持的参数类型的参数又是什么格式的呢? 尽管 Add 方法已准备好了多种重载, 用哪个呢?

下面的程序列出了各种编码器的参数信息:

uses GdiPlus;constParamValueTypeArr: array[1..9] of string = ('ValueTypeByte','ValueTypeASCII','ValueTypeShort','ValueTypeLong','ValueTypeRational','ValueTypeLongRange','ValueTypeUndefined','ValueTypeRationalRange','ValueTypePointer');//自定义函数
function GetGuidName(g: TGUID): string;
vars: string;
begins := EmptyStr;if IsEqualGUID(g, EncoderCompression) then s := 'EncoderCompression';if IsEqualGUID(g, EncoderColorDepth) then s := 'EncoderColorDepth';if IsEqualGUID(g, EncoderScanMethod) then s := 'EncoderScanMethod';if IsEqualGUID(g, EncoderVersion) then s := 'EncoderVersion';if IsEqualGUID(g, EncoderRenderMethod) then s := 'EncoderRenderMethod';if IsEqualGUID(g, EncoderQuality) then s := 'EncoderQuality';if IsEqualGUID(g, EncoderTransformation) then s := 'EncoderTransformation';if IsEqualGUID(g, EncoderLuminanceTable) then s := 'EncoderLuminanceTable';if IsEqualGUID(g, EncoderChrominanceTable) then s := 'EncoderChrominanceTable';if IsEqualGUID(g, EncoderSaveFlag) then s := 'EncoderSaveFlag';if IsEqualGUID(g, CodecIImageBytes) then s := 'CodecIImageBytes';{$IF (GDIPVER >= $0110)}if IsEqualGUID(g, EncoderColorSpace) then s := 'EncoderColorSpace';if IsEqualGUID(g, EncoderImageItems) then s := 'EncoderImageItems';if IsEqualGUID(g, EncoderSaveAsCMYK) then s := 'EncoderSaveAsCMYK';{$IFEND}Result := s;
end;procedure TForm1.Button1Click(Sender: TObject);
varImage: IGPImage;Parameters: IGPEncoderParameters;Param: PGPNativeEncoderParameter;Encoder: IGPImageCodecInfo;
beginImage := TGPBitmap.Create(1, 1);Memo1.Clear;for Encoder in TGPImageCodecInfo.GetImageEncoders do with Memo1.Lines dobeginParameters := Image.GetEncoderParameterList(Encoder.ClsId);Add('----------------------');Add(Format('编码器类型: %s', [Encoder.FormatDescription]));if Parameters.Count = 0 thenbeginAdd('无参数');Add(EmptyStr);Continue;end;Add(Format('参数个数: %d', [Parameters.Count]));for Param in Parameters dobeginAdd(Format('参数类型: %s', [GetGuidName(Param.Guid)]));Add(Format('参数值类型: %s', [ParamValueTypeArr[Ord(Param.ValueType)]]));Add(Format('参数值个数: %d', [Param.NumberOfValues]));Add(Format('参数值指针: $%p', [Param.Value]));Add(EmptyStr);end;end;
end;
(* 显示结果:----------------------编码器类型: BMP无参数----------------------编码器类型: JPEG参数个数: 4参数类型: EncoderTransformation参数值类型: ValueTypeLong参数值个数: 5参数值指针: $00AD8190参数类型: EncoderQuality参数值类型: ValueTypeLongRange参数值个数: 1参数值指针: $00AD81A4参数类型: EncoderLuminanceTable参数值类型: ValueTypeShort参数值个数: 0参数值指针: $00AD81AC参数类型: EncoderChrominanceTable参数值类型: ValueTypeShort参数值个数: 0参数值指针: $00AD81AC----------------------编码器类型: GIF无参数----------------------编码器类型: TIFF参数个数: 3参数类型: EncoderCompression参数值类型: ValueTypeLong参数值个数: 5参数值指针: $00AD8190参数类型: EncoderColorDepth参数值类型: ValueTypeLong参数值个数: 5参数值指针: $00AD81A4参数类型: EncoderSaveFlag参数值类型: ValueTypeLong参数值个数: 1参数值指针: $00AD81B8----------------------编码器类型: PNG无参数
*)

从上面例子可以看出:

BMP、GIF、PNG 三种编码器没有编码参数(GIF 在 GDI+1.1 中是不是支持还没有测试).

JPEG 支持:
EncoderTransformation (转换)
EncoderQuality (质量)
EncoderLuminanceTable (亮度表)
EncoderChrominanceTable (色度表)

TIFF 支持:
EncoderCompression (压缩)
EncoderColorDepth (颜色深度)
EncoderSaveFlag (保存标志)

进而可以得知:

JPEG 编码的参数类型 EncoderTransformation 的可选值是:
TGPEncoderValue(13): EncoderValueTransformRotate90
TGPEncoderValue(14): EncoderValueTransformRotate180
TGPEncoderValue(15): EncoderValueTransformRotate270
TGPEncoderValue(16): EncoderValueTransformFlipHorizontal
TGPEncoderValue(17): EncoderValueTransformFlipVertical

JPEG 编码的参数类型 EncoderQuality 的可选值是: 0..100

TIFF 编码的参数类型 EncoderCompression 的可选值是:
TGPEncoderValue(2): EncoderValueCompressionLZW
TGPEncoderValue(3): EncoderValueCompressionCCITT3
TGPEncoderValue(4): EncoderValueCompressionCCITT4
TGPEncoderValue(5): EncoderValueCompressionRle
TGPEncoderValue(6): EncoderValueCompressionNone

TIFF 编码的参数类型 EncoderColorDepth 的可选值是: 1,4,8,24,32

这些值可以从下面程序获取:

uses GdiPlus;varImage: IGPImage;Parameters: IGPEncoderParameters;p: PCardinal;procedure TForm1.FormCreate(Sender: TObject);
beginImage := TGPBitmap.Create(1, 1);
end;{$PointerMath On}
procedure TForm1.Button1Click(Sender: TObject);
beginParameters := Image.GetEncoderParameterList(TGPImageFormat.Jpeg.CodecId);p := Parameters[0].Value; { EncoderTransformation }ShowMessageFmt('%d,%d,%d,%d,%d', [p[0],p[1],p[2],p[3],p[4]]); { 13,14,15,16,17 }
end;procedure TForm1.Button2Click(Sender: TObject);
beginParameters := Image.GetEncoderParameterList(TGPImageFormat.Jpeg.CodecId);p := Parameters[1].Value; { EncoderQuality }ShowMessageFmt('%d..%d', [p[0],p[1]]); { 0..100 }
end;procedure TForm1.Button3Click(Sender: TObject);
beginParameters := Image.GetEncoderParameterList(TGPImageFormat.Tiff.CodecId);p := Parameters[0].Value; { EncoderCompression }ShowMessageFmt('%d,%d,%d,%d,%d', [p[0],p[1],p[2],p[3],p[4]]); { 2,3,5,4,6 }
end;procedure TForm1.Button4Click(Sender: TObject);
beginParameters := Image.GetEncoderParameterList(TGPImageFormat.Tiff.CodecId);p := Parameters[1].Value; { EncoderColorDepth }ShowMessageFmt('%d,%d,%d,%d,%d', [p[0],p[1],p[2],p[3],p[4]]); { 1,4,8,24,32 }
end;

下面例子通过设置 JPEG 的 EncoderTransformation 编码参数, 保存了旋转后的图片:

26153149_aLm7.png

uses GdiPlus;procedure TForm1.Button1Click(Sender: TObject);
varGraphics: IGPGraphics;Prams: IGPEncoderParameters;Image: IGPImage;
beginChDir('C:\GdiPlusImg\');Image := TGPImage.Create('Grapes.jpg');Prams := TGPEncoderParameters.Create;Prams.Add(EncoderTransformation, EncoderValueTransformRotate90);Image.Save('Grapes_Rotate90.jpg', TGPImageFormat.Jpeg, Prams);Graphics := TGPGraphics.Create(Handle);Graphics.DrawImage(Image, 10, 10, Image.Width, Image.Height);
end;//为什么只有 JPEG 提供这种编码参数呢? 因为 jpg 文件在自动保存过程中会降低品质, 通过这种变换则不会.

另外:

1、编码参数值类型很多是 Cardinal, 这都是官方资料上的; 但 Add 函数中要的是 Integer 类型.

2、从上面获取的信息可以知道, GDI+1.0 还无法写入 gif 动画; GDI+1.1 能不能还没有测试.

3、通过设置 TIFF 编码器的 EncoderSaveFlag 类型参数可保存多页的 TIFF 文件, 下次接上.

转载于:https://my.oschina.net/hermer/blog/319462

http://www.lbrq.cn/news/2745793.html

相关文章:

  • php网站设计人员郑州网站开发顾问
  • 福州网站建设兼职网络营销案例视频
  • 长沙自媒体公司广州:推动优化防控措施落
  • 网站建设学费要多少广告优化师前景怎样
  • 专做婚礼logo的网站推广普通话的意义简短
  • 烟台网站开发制作网站开发费用
  • 网站如何做se企业网站优化外包
  • 做足彩推荐赚钱的网站品牌营销是什么
  • html改变字体大小代码张家界网站seo
  • 文体广电旅游局网站建设方案信息流优化师面试常见问题
  • 海淀做网站百度竞价点击价格
  • 可以做外链的图片网站山东省住房和城乡建设厅
  • 网站改版什么意思哪些行业适合做seo
  • 网站营销型企业销售平台搜索优化网络推广
  • 哈尔滨微网站建设吴江网站制作
  • 网站空间怎么买免费的网页模板网站
  • 合肥企业网站建设工作室网站推广工具有哪些
  • 网站建设怎么接单上海站优云网络科技有限公司
  • 军事新闻网最新新闻河北电子商务seo
  • 网站搜索栏怎么做南京关键词优化软件
  • 建设工程教育网建设工程类的考试辅导网站广州百度首页优化
  • flash网站导航怎么做公众号如何推广运营
  • 网站建设公司潍坊微博seo营销
  • 模板网站可以自己买空间吗吗安徽网站推广优化
  • 网站建站流程图二十条优化措施
  • 如何建立自己推广网站企业推广哪个平台好
  • 在线网站开发培训爱站网 关键词挖掘工具站
  • 学校网站方案阿里巴巴关键词排名优化
  • 网站开发 哪些技术发稿推广
  • 手机网站模板源码下载seo优化一般多少钱
  • 【R语言】R 语言中打印含有双引号的字符串时会出现 “\” 的原因解析
  • Java增强for循环(小白友好版)
  • C语言---第一个C语言程序
  • Tomcat下载、安装及配置详细教程
  • ubuntu网络共享
  • JVM执行引擎深入理解