⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ievfw.pas

📁 ·ImageEn 2.3.0 ImageEn一组用于图像处理、查看和分析的Delphi控件。能够保存几种图像格式
💻 PAS
📖 第 1 页 / 共 2 页
字号:

unit ievfw;

{$R-}
{$Q-}

{$I ie.inc}

interface

uses Windows;

const
  streamtypeVIDEO = $73646976; // DWORD( 'v', 'i', 'd', 's' )
  streamtypeAUDIO = $73647561; // DWORD( 'a', 'u', 'd', 's' )
  streamtypeMIDI = $7364696D; // DWORD( 'm', 'i', 'd', 's' )
  streamtypeTEXT = $73747874; // DWORD( 't', 'x', 't', 's' )
  comptypeDIB = $20424944; // DWORD( 'D', 'I', 'B', ' ' )

  AVIIF_KEYFRAME = $10;

type

  PCLSID = PGUID;
  TIID = TGUID;

  IUnknown = class
  public
    function QueryInterface(const iid: TIID; var obj): HResult; virtual; stdcall; abstract;
    function AddRef: Longint; virtual; stdcall; abstract;
    function Release: Longint; virtual; stdcall; abstract;
  end;

  LONG = Longint;
  PVOID = Pointer;

  PAviStreamInfoA = ^TAviStreamInfoA;
  TAviStreamInfoA = record
    fccType: DWORD;
    fccHandler: DWORD;
    dwFlags: DWORD; // Contains AVITF_* flags
    dwCaps: DWORD;
    wPriority: WORD;
    wLanguage: WORD;
    dwScale: DWORD;
    dwRate: DWORD; // dwRate / dwScale == samples/second
    dwStart: DWORD;
    dwLength: DWORD; // In units above...
    dwInitialFrames: DWORD;
    dwSuggestedBufferSize: DWORD;
    dwQuality: DWORD;
    dwSampleSize: DWORD;
    rcFrame: TRECT;
    dwEditCount: DWORD;
    dwFormatChangeCount: DWORD;
    szName: array[0..63] of AnsiChar;
  end;
  TAviStreamInfo = TAviStreamInfoA;

  PAviStreamInfoW = ^TAviStreamInfoW;
  TAviStreamInfoW = record
    fccType: DWORD;
    fccHandler: DWORD;
    dwFlags: DWORD; // Contains AVITF_* flags
    dwCaps: DWORD;
    wPriority: WORD;
    wLanguage: WORD;
    dwScale: DWORD;
    dwRate: DWORD; // dwRate / dwScale == samples/second
    dwStart: DWORD;
    dwLength: DWORD; // In units above...
    dwInitialFrames: DWORD;
    dwSuggestedBufferSize: DWORD;
    dwQuality: DWORD;
    dwSampleSize: DWORD;
    rcFrame: TRECT;
    dwEditCount: DWORD;
    dwFormatChangeCount: DWORD;
    szName: array[0..63] of WideChar;
  end;

const
  AVISTREAMINFO_DISABLED = $00000001;
  AVISTREAMINFO_FORMATCHANGES = $00010000;

type
  PAviFileInfoA = ^TAviFileInfoA;
  TAviFileInfoA = record
    dwMaxBytesPerSec: DWORD; // max. transfer rate
    dwFlags: DWORD; // the ever-present flags
    dwCaps: DWORD;
    dwStreams: DWORD;
    dwSuggestedBufferSize: DWORD;
    dwWidth: DWORD;
    dwHeight: DWORD;
    dwScale: DWORD;
    dwRate: DWORD; // dwRate / dwScale == samples/second
    dwLength: DWORD;
    dwEditCount: DWORD;
    // descriptive string for file type?
    szFileType: array[0..63] of Char;
  end;
  TAviFileInfo = TAviFileInfoA;

  PAviFileInfoW = ^TAviFileInfoW;
  TAviFileInfoW = record
    dwMaxBytesPerSec: DWORD; // max. transfer rate
    dwFlags: DWORD; // the ever-present flags
    dwCaps: DWORD;
    dwStreams: DWORD;
    dwSuggestedBufferSize: DWORD;
    dwWidth: DWORD;
    dwHeight: DWORD;
    dwScale: DWORD;
    dwRate: DWORD; // dwRate / dwScale == samples/second
    dwLength: DWORD;
    dwEditCount: DWORD;
    // descriptive string for file type?
    szFileType: array[0..63] of WideChar;
  end;

const
  // Flags for dwFlags
  AVIFILEINFO_HASINDEX = $00000010;
  AVIFILEINFO_MUSTUSEINDEX = $00000020;
  AVIFILEINFO_ISINTERLEAVED = $00000100;
  AVIFILEINFO_WASCAPTUREFILE = $00010000;
  AVIFILEINFO_COPYRIGHTED = $00020000;

  // Flags for dwCaps
  AVIFILECAPS_CANREAD = $00000001;
  AVIFILECAPS_CANWRITE = $00000002;
  AVIFILECAPS_ALLKEYFRAMES = $00000010;
  AVIFILECAPS_NOCOMPRESSION = $00000020;

  // defines for uiFlags
  ICMF_CHOOSE_KEYFRAME = $0001; // show KeyFrame Every box
  ICMF_CHOOSE_DATARATE = $0002; // show DataRate box
  ICMF_CHOOSE_PREVIEW = $0004; // allow expanded preview dialog
  ICMF_CHOOSE_ALLCOMPRESSORS = $0008; // don't only show those that

type
  TAVISaveCallBack = function(Percentage: Integer): Boolean stdcall;
  AVISaveCallBack = ^TAVISaveCallBack;

type
  PAviCompressOptions = ^TAviCompressOptions;
  TAviCompressOptions = record
    fccType: DWORD; // stream type, for consistency
    fccHandler: DWORD; // compressor
    dwKeyFrameEvery: DWORD; // keyframe rate
    dwQuality: DWORD; // compress quality 0-10,000
    dwBytesPerSecond: DWORD; // bytes per second
    dwFlags: DWORD; // flags... see aviopts.h
    lpFormat: PVOID; // save format
    cbFormat: DWORD;
    lpParms: PVOID; // compressor options
    cbParms: DWORD;
    dwInterleaveEvery: DWORD; // for non-video streams only
  end;

  //
  // Defines for the dwFlags field of the AVICOMPRESSOPTIONS struct
  // Each of these flags determines if the appropriate field in the structure
  // (dwInterleaveEvery, dwBytesPerSecond, and dwKeyFrameEvery) is payed
  // attention to.  See the autodoc in avisave.c for details.
  //
const
  AVICOMPRESSF_INTERLEAVE = $00000001; // interleave
  AVICOMPRESSF_DATARATE = $00000002; // use a data rate
  AVICOMPRESSF_KEYFRAMES = $00000004; // use keyframes
  AVICOMPRESSF_VALID = $00000008; // has valid data?

  // #include "aviiface.h": All necessary stuff from "aviiface.h" follows

type
  // IAVIStream interface
  IAVIStream = class(IUnknown)
    function Create(lParam1, lParam2: LPARAM): HResult; virtual; stdcall; abstract;
    function Info(var psi: TAVIStreamInfoW; lSize: LONG): HResult; virtual; stdcall; abstract;
    function FindSample(lPos, lFlags: LONG): LONG; virtual; stdcall; abstract;
    function ReadFormat(lPos: LONG; lpFormat: PVOID; var lpcbFormat: LONG): HResult; virtual; stdcall; abstract;
    function SetFormat(lPos: LONG; lpFormat: PVOID; lpcbFormat: LONG): HResult; virtual; stdcall; abstract;
    function Read(lStart, lSamples: LONG; lpBuffer: PVOID; cbBuffer: LONG; var plBytes: LONG; var plSamples: LONG): HResult; virtual; stdcall; abstract;
    function Write(lStart, lSamples: LONG; lpBuffer: PVOID; cbBuffer: LONG; dwFlags: DWORD; var plSampWritten: LONG; var plBytesWritten: LONG): HResult; virtual; stdcall; abstract;
    function Delete(lStart, lSamples: LONG): HResult; virtual; stdcall; abstract;
    function ReadData(fcc: DWORD; lp: PVOID; var lpcb: LONG): HResult; virtual; stdcall; abstract;
    function WriteData(fcc: DWORD; lp: PVOID; cb: LONG): HResult; virtual; stdcall; abstract;
    function SetInfo(var lpInfo: TAVIStreamInfoW; cbInfo: LONG): HResult; virtual; stdcall; abstract;
  end;
  PAVIStream = ^IAVIStream;

  // IAVIEditStream interface
  IAVIEditStream = class(IUnknown)
    function Info(var pfi: TAVIFileInfoW; lSize: LONG): HResult; virtual; stdcall; abstract;
    function Cut(var plStart: LONG; var plLength: Long; var ppResult: PAVISTREAM): HResult; virtual; stdcall; abstract;
    function Copy(var plLength: Long; var ppResult: PAVISTREAM): HResult; virtual; stdcall; abstract;
    function Paste(var plLength: Long; pstream: PAVISTREAM; lStart: LONG; lEnd: LONG): HResult; virtual; stdcall; abstract;
    function Clone(var ppResult: PAVISTREAM): HResult; virtual; stdcall; abstract;
    function SetInfo(var lpInfo: TAVIStreamInfoW; cbInfo: LONG): HResult; virtual; stdcall; abstract;
  end;
  PAVIEditStream = ^IAVIEditStream;

  // IAVIFile interface
  IAVIFile = class(IUnknown)
    function Open(szFile: LPCSTR; mode: UINT): HResult; virtual; stdcall; abstract;
    function Info(var pfi: TAviFileInfo; lSize: LONG): HResult; virtual; stdcall; abstract;
    function GetStream(var ppStream: PAVISTREAM; fccType: DWORD; lParam: LONG): HResult; virtual; stdcall; abstract;
    function CreateStream(var ppStream: PAVISTREAM; psi: TAVISTREAMINFO): HResult; virtual; stdcall; abstract;
    function Save(szFile: LPCSTR; var lpOptions: TAVICOMPRESSOPTIONS; lpfnCallback: AVISAVECALLBACK): HResult; virtual; stdcall; abstract;
    function WriteData(ckid: DWORD; lpData: PVOID; cbData: LONG): HResult; virtual; stdcall; abstract;
    function ReadData(ckid: DWORD; lpData: PVOID; var lpcbData: LONG): HResult; virtual; stdcall; abstract;
    function EndRecord: HResult; virtual; stdcall; abstract;
  end;
  PAVIFile = ^IAVIFile;

  // IGetFrame interface
type
  IGetFrame = class(IUnknown)
    function GetFrame(lPos: LONG): PVOID; virtual; stdcall; abstract;
    function SetFormat(lpbi: PBITMAPINFOHEADER; lpBits: PVOID; x: Integer; y: Integer; dx: Integer; dy: Integer): HResult; virtual; stdcall; abstract;
  end;
  PGetFrame = ^IGetFrame;

const
  // AVI interface IDs
  IID_IAVIFile: TGUID = (
    D1: $00020020; D2: $0; D3: $0; D4: ($C0, $0, $0, $0, $0, $0, $0, $46));
  IID_IAVIStream: TGUID = (
    D1: $00020021; D2: $0; D3: $0; D4: ($C0, $0, $0, $0, $0, $0, $0, $46));
  IID_IAVIStreaming: TGUID = (
    D1: $00020022; D2: $0; D3: $0; D4: ($C0, $0, $0, $0, $0, $0, $0, $46));
  IID_IGetFrame: TGUID = (

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -