科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件GDI 在Delphi程序的应用:多帧(页)图像的分解与合成

GDI 在Delphi程序的应用:多帧(页)图像的分解与合成

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文简单介绍多帧(页)图片分解与合成的例子。还有,TEncoderParameters是个封装图像编码器参数TEncoderParameter的数组类型结构,成员包括TEncoderParameter类型数组和数组个数。

作者:maozefa 来源:Csdn博客 2007年12月26日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

编码参数的数据类型也是有规定的,具体定义和说明如下:

//---------------------------------------------------------------------------
// Image encoder parameter related types
//---------------------------------------------------------------------------

TEncoderParameterValueType = (
EncoderParameterValueTypeByte   = 1,    // 数组中的每个值都是 8 位无符号整数
EncoderParameterValueTypeASCII  = 2,    // 一个空终止的 ASCII 字符串,
// NumberOfValues 包括 NULL 结束符在内的字符串长度
EncoderParameterValueTypeShort  = 3,    // 数组中的每个值都是 16 位无符号整数
EncoderParameterValueTypeLong   = 4,    // 数组中的每个值都是 32 位无符号整数
EncoderParameterValueTypeRational       = 5,    // 数组中的每一个值都是一对 32 位无符号整数,
// 每一对都表示一个分数,
// 第一个整数是分子,第二个整数是分母.
EncoderParameterValueTypeLongRange      = 6,    // 数组中的每一个值都是一对 32 位无符号整数,
// 每一对都表示一个数字区域.
EncoderParameterValueTypeUndefined      = 7,    // 值的数组是没有定义数据类型的字节的数组
EncoderParameterValueTypeRationalRange  = 8     

// 数组中的每一个值都是一组四个 32 位无符号整数,
// 前两个整数表示一个分数,后两个整数表示第二个分数,
// 这两个分数表示一个有理数区域,
// 第一个分数是该区域中最小的有理数,
// 第二个分数是该区域中最大的有理数.
);

从上面的类型说明可以看出,有些类型定义对参数值(Value)的规定很具体,你只有按要求给出才不会出错。有些参数我们可以给的值的范围较大,如例子中的品质参数,就可以在0 - 100之间;而还有些值则是规定好了的,如例子中的保存参数的值,下面也把这些值的枚举定义以及使用图像格式列在下面:

//---------------------------------------------------------------------------
// Image encoder value types
//---------------------------------------------------------------------------

TEncoderValue = (
EncoderValueColorTypeCMYK,
EncoderValueColorTypeYCCK,
EncoderValueCompressionLZW,  // LZW 压缩方案。可以作为属于压缩类别的参数传递到

TIFF 编码器。
EncoderValueCompressionCCITT3,       // CCITT3 压缩方案。

可以作为属于压缩类别的参数传递到 TIFF 编码器。
EncoderValueCompressionCCITT4,       // CCITT4 压缩方案。

可以作为属于压缩类别的参数传递到 TIFF 编码器。
EncoderValueCompressionRle,  // RLE 压缩方案。可以作为属于压缩类别的参数传递到

TIFF 编码器。
EncoderValueCompressionNone, // 不指定压缩。可以作为属于压缩类别的参数传递到

TIFF 编码器。
EncoderValueScanMethodInterlaced,
EncoderValueScanMethodNonInterlaced,
EncoderValueVersionGif87,
EncoderValueVersionGif89,
EncoderValueRenderProgressive,
EncoderValueRenderNonProgressive,
EncoderValueTransformRotate90,      

// 图像将围绕其中心沿顺时针方向旋转 90 度。可以作为属于转换类别的参数传递到 JPEG 编码器
EncoderValueTransformRotate180,     

// 图像围绕其中心旋转 180 度。可以作为属于转换类别的参数传递到 JPEG 编码器。
EncoderValueTransformRotate270,     

// 图像围绕其中心沿顺时针方向旋转 270 度。可以作为属于转换类别的参数传递到 JPEG 编码器
EncoderValueTransformFlipHorizontal,

// 图像水平翻转。可以作为属于转换类别的参数传递到 JPEG 编码器。
EncoderValueTransformFlipVertical,  

// 图像垂直翻转。可以作为属于转换类别的参数传递到 JPEG 编码器。
EncoderValueMultiFrame,     

// 图像有多于 1 帧(页面)。可以作为属于保存标志类别的参数传递到 TIFF 编码器
EncoderValueLastFrame,      

// 指定多帧图像中的最后一帧。可以作为属于保存标志类别的参数传递到 TIFF 编码器。
EncoderValueFlush,  

// 应关闭一个多帧文件或流。可以作为属于保存标志类别的参数传递到 TIFF 编码器
EncoderValueFrameDimensionTime,
EncoderValueFrameDimensionResolution,
EncoderValueFrameDimensionPage      

// 将一帧添加到图像的页面维度。可以作为属于保存标志类别的参数传递到 TIFF 编码器。
);

没做说明的枚举值在GDI+ 1.0中是不支持的,其它也只适用规定的图像格式,如EncoderValueMultiFrame和EncoderValueFrameDimensionPage只适用于TIFF格式编码器,而EncoderValueFrameDimensionTime等值由不支持,所以,前面例子只能合成TIFF格式的多帧图像,而不能合成GIF格式。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章