Esempio n. 1
0
        /// <summary>
        /// Initializes a new instance of the <see cref='Metafile'/> class with the specified filename.
        /// </summary>
        public unsafe Metafile(Stream stream, IntPtr referenceHdc, Rectangle frameRect, MetafileFrameUnit frameUnit, EmfType type, string?description)
        {
            using DrawingCom.IStreamWrapper streamWrapper = DrawingCom.GetComWrapper(new GPStream(stream));

            IntPtr metafile = IntPtr.Zero;

            if (frameRect.IsEmpty)
            {
                Gdip.CheckStatus(Gdip.GdipRecordMetafileStream(
                                     streamWrapper.Ptr,
                                     referenceHdc,
                                     type,
                                     IntPtr.Zero,
                                     frameUnit,
                                     description,
                                     &metafile));
            }
            else
            {
                Gdip.CheckStatus(Gdip.GdipRecordMetafileStreamI(
                                     streamWrapper.Ptr,
                                     referenceHdc,
                                     type,
                                     &frameRect,
                                     frameUnit,
                                     description,
                                     &metafile));
            }

            SetNativeImage(metafile);
        }
Esempio n. 2
0
        /// <summary>
        /// Initializes a new instance of the <see cref='Metafile'/> class from the specified stream.
        /// </summary>
        public unsafe Metafile(Stream stream)
        {
            ArgumentNullException.ThrowIfNull(stream);

            using DrawingCom.IStreamWrapper streamWrapper = DrawingCom.GetComWrapper(new GPStream(stream));

            IntPtr metafile = IntPtr.Zero;

            Gdip.CheckStatus(Gdip.GdipCreateMetafileFromStream(streamWrapper.Ptr, &metafile));

            SetNativeImage(metafile);
        }
Esempio n. 3
0
        /// <summary>
        /// Initializes a new instance of the <see cref='Metafile'/> class from the specified data stream.
        /// </summary>
        public unsafe Metafile(Stream stream, IntPtr referenceHdc, EmfType type, string?description)
        {
            using DrawingCom.IStreamWrapper streamWrapper = DrawingCom.GetComWrapper(new GPStream(stream));

            IntPtr metafile = IntPtr.Zero;

            Gdip.CheckStatus(Gdip.GdipRecordMetafileStream(
                                 streamWrapper.Ptr,
                                 referenceHdc,
                                 type,
                                 IntPtr.Zero,
                                 MetafileFrameUnit.GdiCompatible,
                                 description,
                                 &metafile));

            SetNativeImage(metafile);
        }
Esempio n. 4
0
        /// <summary>
        /// Returns the <see cref='MetafileHeader'/> associated with the specified <see cref='Metafile'/>.
        /// </summary>
        public static MetafileHeader GetMetafileHeader(Stream stream)
        {
            MetafileHeader header;

            IntPtr memory = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(MetafileHeaderEmf)));

            try
            {
                using DrawingCom.IStreamWrapper streamWrapper = DrawingCom.GetComWrapper(new GPStream(stream));
                Gdip.CheckStatus(Gdip.GdipGetMetafileHeaderFromStream(streamWrapper.Ptr, memory));

                int[] type = new int[] { 0 };

                Marshal.Copy(memory, type, 0, 1);

                MetafileType metafileType = (MetafileType)type[0];

                header = new MetafileHeader();

                if (metafileType == MetafileType.Wmf ||
                    metafileType == MetafileType.WmfPlaceable)
                {
                    // WMF header
                    header.wmf = (MetafileHeaderWmf)Marshal.PtrToStructure(memory, typeof(MetafileHeaderWmf)) !;
                    header.emf = null;
                }
                else
                {
                    // EMF header
                    header.wmf = null;
                    header.emf = (MetafileHeaderEmf)Marshal.PtrToStructure(memory, typeof(MetafileHeaderEmf)) !;
                }
            }
            finally
            {
                Marshal.FreeHGlobal(memory);
            }

            return(header);
        }