以下为EMF版(Access 2000及更高版本)的PictureData结构:
'PictureData信息头 PictureData(0-7) PictureData信息头
'EMF信息头 PictureData(8) iType As Long PictureData(12) nSize As Long PictureData(16) rclBounds{Long,Long,Long,Long} PictureData(32) rclFrame{Long,Long,Long,Long} PictureData(48) dSignature As Long PictureData(52) nVersion As Long PictureData(56) nBytes As Long PictureData(60) nRecords As Long PictureData(64) nHandles As Integer PictureData(66) sReserved As Integer PictureData(68) nDescription As Long PictureData(72) offDescription As Long PictureData(76) nPalEntries As Long PictureData(80) szlDevice{Width As Long,Height As Long} PictureData(88) szlMillimeters{Long,Long} PictureData(96) cbPixelFormat As Long PictureData(100) offPixelFormat As Long PictureData(104) bOpenGL As Long PictureData(108) szMicroMeters{Long,Long}
'EMF数据段 PictureData(116)~结尾
【PictureData信息头】
PictureData(0)指定整个图形的格式: DIB:设备无关图元(=40),文件头长度为40,其后为像素数据。 WMF:Windows MetaFile(=3),文件头长度为8,其后为WMF。 EMF:Enhanced MetaFile(=14),文件头长度为8,其后为EMF。 Access97及以下版本使用DIB和WMF,Access 2000及以上版本使用DIB/WMF/EMF。
【EMF信息头】
iType指定BMP版本: BMP3.0:BITMAPINFOHEADER(=40)也就是DIB BMP4.0:BITMAPV4HEADER(=108) BMP5.0:BITMAPV5HEADER(=124) 实际上,iType等价于文件头的长度,PictureData(8)~PictureData(8+iType)即图形信息头的全部内容。
【EMF数据段】
由多条EMF记录(EMR)构成,每条记录均包含EMR定义和EMR参数。(EMF信息头其实也是一条特殊的EMR,同样符合EMR格式定义)
EMR定义: iType As Long nSize As Long
EMR.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 16 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 EMR_SETARCDIRECTION 57 EMR_SETMITERLIMIT &nbs
p; 58 EMR_BEGINPATH 59 EMR_ENDPATH 60 EMR_CLOSEFIGURE 61 EMR_FILLPATH 62 EMR_STROKEANDFILLPATH 63 EMR_STROKEPATH 64 EMR_FLATTENPATH 65 EMR_WIDENPATH 66 EMR_SELECTCLIPPATH 67 EMR_ABORTPATH 68 EMR_GDICOMMENT 70 EMR_FILLRGN 71 EMR_FRAMERGN 72 EMR_INVERTRGN 73 EMR_PAINTRGN 74 EMR_EXTSELECTCLIPRGN 75 EMR_BITBLT 76 EMR_STRETCHBLT 77 EMR_MASKBLT 78 EMR_PLGBLT 79 EMR_SETDIBITSTODEVICE 80 EMR_STRETCHDIBITS 81 EMR_EXTCREATEFONTINDIRECTW 82 EMR_EXTTEXTOUTA 83 EMR_EXTTEXTOUTW 84 EMR_POLYBEZIER16 85 EMR_POLYGON16 86 EMR_POLYLINE16 87 EMR_POLYBEZIERTO16 88 EMR_POLYLINETO16 89 EMR_POLYPOLYLINE16 90 EMR_POLYPOLYGON16 91 EMR_POLYDRAW16 92 EMR_CREATEMONOBRUSH 93 EMR_CREATEDIBPATTERNBRUSHPT 94 EMR_EXTCREATEPEN 95 EMR_POLYTEXTOUTA 96 EMR_POLYTEXTOUTW 97
以下只用于Windows 95/98/ME/NT/2000/XP(Windows 4.0以上) EMR_SETICMMODE 98 EMR_CREATECOLORSPACE 99 EMR_SETCOLORSPACE 100 EMR_DELETECOLORSPACE 101 EMR_GLSRECORD 102 EMR_GLSBOUNDEDRECORD 103 EMR_PIXELFORMAT 104
以下只用于Windows NT/2000/XP(Windows 5.0以上) EMR_DRAWESCAPE 105 EMR_EXTESCAPE 106 EMR_STARTDOC 107 EMR_SMALLTEXTOUT 108 EMR_FORCEUFIMAPPING 109 EMR_NAMEDESCAPE 110 EMR_COLORCORRECTPALETTE 111 EMR_SETICMPROFILEA 112 EMR_SETICMPROFILEW 113 EMR_ALPHABLEND 114 EMR_ALPHADIBBLEND 115 EMR_TRANSPARENTBLT 116 EMR_TRANSPARENTDIB 117 EMR_GRADIENTFILL 118 EMR_SETLINKEDUFIS 119 EMR_SETTEXTJUSTIFICATION 120
|