API 图像函数(delphi) 联系客服

发布时间 : 星期二 文章API 图像函数(delphi)更新完毕开始阅读

procedure TForm1.Button1Click(Sender: TObject); const

n = #13#10; var

MetaHeaderSize: Integer; {文件头大小} MetaHeader: PEnhMetaHeader; {文件头结构的指针} str: string;

buf: array[Word] of Char; begin

MetaHeaderSize := GetEnhMetaFileHeader(HMetaFile, 0, nil); GetMem(MetaHeader, MetaHeaderSize);

GetEnhMetaFileHeader(HMetaFile, MetaHeaderSize, MetaHeader);

str := 'iType: %d' + n + 'nSize: %d' + n +

'rclBounds: %d,%d,%d,%d' + n + 'rclFrame: %d,%d,%d,%d' + n + 'dSignature: %d' + n + 'nVersion: %d' + n + 'nBytes: %d' + n + 'nRecords: %d' + n + 'nHandles: %d' + n + //'sReserved: %d' + n + 'nDescription: %d' + n + 'offDescription: %d' + n + 'nPalEntries: %d' + n + 'szlDevice: %d,%d' + n + 'szlMillimeters: %d,%d' + n + 'cbPixelFormat: %d' + n + 'offPixelFormat: %d' + n + 'bOpenGL: %d';

wvsprintf(buf, PChar(str), PChar(MetaHeader)); ShowMessage(buf); FreeMem(MetaHeader); end;

{绘制在窗体}

procedure TForm1.Button2Click(Sender: TObject); begin

PlayEnhMetaFile(Canvas.Handle, HMetaFile, Rect(11,11,111,111)); end;

{删除 EMF 文件句柄}

procedure TForm1.FormDestroy(Sender: TObject); begin

DeleteEnhMetaFile(HMetaFile); end; end.

用 GDI 操作 EMF 文件[7]: EnumEnhMetaFile、PlayEnhMetaFileRecord - 枚举文件中的图形命令

EnumEnhMetaFile(

DC: HDC; {目标设备句柄; 如果回调函数不需要回放, 该参数为 0} Emf: HENHMETAFILE; {图元文件句柄}

EnhMetaFunc: TFNEnhMFEnumProc; {回调函数指针; 回调函数格式见下} Data: Pointer; {自定义数据指针}

const Rect: TRect {要输出的尺寸; 如果 DC=0 该参数会被忽略} ): BOOL;

//EnumEnhMetaFile 使用的回调函数格式及参数, PlayEnhMetaFileRecord 基本就是使用这些参数:

function EnhMetaFunc(

DisplaySurface: HDC; {目标设备句柄; 如果回调函数不需要回放, 该参数为 0}

var MetafileTable: THandleTable; {句柄表数组指针, 数组包含 HGDIOBJ 对象(画笔、画刷等); 元素1是文件自身句柄}

var MetafileRecord: TEnhMetaRecord; {图元文件记录 TEnhMetaRecord 指针, TEnhMetaRecord 结构见下表}

ObjectCount: Integer; {对象句柄数目, 即句柄表 MetafileTable 中图形对象的数目}

var Data: Longint {自定义数据指针} ): Integer; stdcall;

//TEnhMetaRecord 结构:

tagENHMETARECORD = packed record iType: DWORD; {类型} nSize: DWORD; {尺寸} dParm: array[0..0] of DWORD; {参数数组} end;

//TEnhMetaRecord.iType 的可能值: EMR_HEADER = 1; EMR_POLYBEZIER = 2; EMR_POLYGON = 3; EMR_POLYLINE = 4; EMR_POLYBEZIERTO = 5; EMR_POLYLINETO = 6; EMR_POLYPOLYLINE = 7; EMR_POLYPOLYGON = 8; EMR_SETWINDOWEXTEX = 9; EMR_SETWINDOWORGEX = 10; EMR_SETVIEWPORTEXTEX = 11; EMR_SETVIEWPORTORGEX = 12; EMR_SETBRUSHORGEX = 13; EMR_EOF = 14; EMR_SETPIXELV = 15; EMR_SETMAPPERFLAGS = $10; EMR_SETMAPMODE = 17; EMR_SETBKMODE = 18;

EMR_SETPOLYFILLMODE = 19; EMR_SETROP2 = 20; EMR_SETSTRETCHBLTMODE = 21; EMR_SETTEXTALIGN = 22; EMR_SETCOLORADJUSTMENT = 23; EMR_SETTEXTCOLOR = 24; EMR_SETBKCOLOR = 25; EMR_OFFSETCLIPRGN = 26; EMR_MOVETOEX = 27; EMR_SETMETARGN = 28; EMR_EXCLUDECLIPRECT = 29; EMR_INTERSECTCLIPRECT = 30; EMR_SCALEVIEWPORTEXTEX = 31; EMR_SCALEWINDOWEXTEX = 32; EMR_SAVEDC = 33; EMR_RESTOREDC = 34; EMR_SETWORLDTRANSFORM = 35; EMR_MODIFYWORLDTRANSFORM = 36; EMR_SELECTOBJECT = 37; EMR_CREATEPEN = 38; EMR_CREATEBRUSHINDIRECT = 39; EMR_DELETEOBJECT = 40; EMR_ANGLEARC = 41; EMR_ELLIPSE = 42; EMR_RECTANGLE = 43; EMR_ROUNDRECT = 44; EMR_ARC = 45; EMR_CHORD = 46; EMR_PIE = 47; EMR_SELECTPALETTE = 48; EMR_CREATEPALETTE = 49; EMR_SETPALETTEENTRIES = 50; EMR_RESIZEPALETTE = 51; EMR_REALIZEPALETTE = 52; EMR_EXTFLOODFILL = 53; EMR_LINETO = 54; EMR_ARCTO = 55; EMR_POLYDRAW = 56;