public void Apply(PictureDescriptor pict)
        {
            ImagePart imgPart = copyPicture(pict.BlipStoreEntry);

            if (imgPart != null)
            {
                Shape shape = (Shape)pict.ShapeContainer.Children[0];
                List <ShapeOptions.OptionEntry> options = pict.ShapeContainer.ExtractOptions();

                //v:shapetype
                PictureFrameType type = new PictureFrameType();
                type.Convert(new VMLShapeTypeMapping(_writer));

                //v:shape
                _writer.WriteStartElement("v", "shape", OpenXmlNamespaces.VectorML);
                _writer.WriteAttributeString("type", "#" + VMLShapeTypeMapping.GenerateTypeId(type));

                StringBuilder style        = new StringBuilder();
                double        xScaling     = pict.mx / 1000.0;
                double        yScaling     = pict.my / 1000.0;
                TwipsValue    width        = new TwipsValue(pict.dxaGoal * xScaling);
                TwipsValue    height       = new TwipsValue(pict.dyaGoal * yScaling);
                string        widthString  = Convert.ToString(width.ToPoints(), CultureInfo.GetCultureInfo("en-US"));
                string        heightString = Convert.ToString(height.ToPoints(), CultureInfo.GetCultureInfo("en-US"));
                style.Append("width:").Append(widthString).Append("pt;");
                style.Append("height:").Append(heightString).Append("pt;");
                _writer.WriteAttributeString("style", style.ToString());

                _writer.WriteAttributeString("id", pict.ShapeContainer.GetHashCode().ToString());

                if (_olePreview)
                {
                    _writer.WriteAttributeString("o", "ole", OpenXmlNamespaces.Office, "");
                }

                foreach (ShapeOptions.OptionEntry entry in options)
                {
                    switch (entry.pid)
                    {
                    //BORDERS

                    case ShapeOptions.PropertyId.borderBottomColor:
                        RGBColor bottomColor = new RGBColor((int)entry.op, RGBColor.ByteOrder.RedFirst);
                        _writer.WriteAttributeString("o", "borderbottomcolor", OpenXmlNamespaces.Office, "#" + bottomColor.SixDigitHexCode);
                        break;

                    case ShapeOptions.PropertyId.borderLeftColor:
                        RGBColor leftColor = new RGBColor((int)entry.op, RGBColor.ByteOrder.RedFirst);
                        _writer.WriteAttributeString("o", "borderleftcolor", OpenXmlNamespaces.Office, "#" + leftColor.SixDigitHexCode);
                        break;

                    case ShapeOptions.PropertyId.borderRightColor:
                        RGBColor rightColor = new RGBColor((int)entry.op, RGBColor.ByteOrder.RedFirst);
                        _writer.WriteAttributeString("o", "borderrightcolor", OpenXmlNamespaces.Office, "#" + rightColor.SixDigitHexCode);
                        break;

                    case ShapeOptions.PropertyId.borderTopColor:
                        RGBColor topColor = new RGBColor((int)entry.op, RGBColor.ByteOrder.RedFirst);
                        _writer.WriteAttributeString("o", "bordertopcolor", OpenXmlNamespaces.Office, "#" + topColor.SixDigitHexCode);
                        break;

                    //CROPPING

                    case ShapeOptions.PropertyId.cropFromBottom:
                        //cast to signed integer
                        int cropBottom = (int)entry.op;
                        appendValueAttribute(_imageData, null, "cropbottom", cropBottom + "f", null);
                        break;

                    case ShapeOptions.PropertyId.cropFromLeft:
                        //cast to signed integer
                        int cropLeft = (int)entry.op;
                        appendValueAttribute(_imageData, null, "cropleft", cropLeft + "f", null);
                        break;

                    case ShapeOptions.PropertyId.cropFromRight:
                        //cast to signed integer
                        int cropRight = (int)entry.op;
                        appendValueAttribute(_imageData, null, "cropright", cropRight + "f", null);
                        break;

                    case ShapeOptions.PropertyId.cropFromTop:
                        //cast to signed integer
                        int cropTop = (int)entry.op;
                        appendValueAttribute(_imageData, null, "croptop", cropTop + "f", null);
                        break;
                    }
                }

                //v:imageData
                appendValueAttribute(_imageData, "r", "id", imgPart.RelIdToString, OpenXmlNamespaces.Relationships);
                appendValueAttribute(_imageData, "o", "title", "", OpenXmlNamespaces.Office);
                _imageData.WriteTo(_writer);

                //borders
                writePictureBorder("bordertop", pict.brcTop);
                writePictureBorder("borderleft", pict.brcLeft);
                writePictureBorder("borderbottom", pict.brcBottom);
                writePictureBorder("borderright", pict.brcRight);

                //close v:shape
                _writer.WriteEndElement();
            }
        }
        //public void Apply(BlipStoreEntry bse, Shape shape, ShapeOptions options, Rectangle bounds, ConversionContext ctx, string spid, ref Point size)
        public void Apply(List <ArrayList> VMLEntriesList, ConversionContext ctx)
        {
            _ctx = ctx;
            BlipStoreEntry bse;

            _writer.WriteStartDocument();
            _writer.WriteStartElement("xml");

            _writer.WriteStartElement("o", "shapelayout", OpenXmlNamespaces.Office);
            _writer.WriteAttributeString("v", "ext", OpenXmlNamespaces.VectorML, "edit");
            _writer.WriteStartElement("o", "idmap", OpenXmlNamespaces.Office);
            _writer.WriteAttributeString("v", "ext", OpenXmlNamespaces.VectorML, "edit");
            _writer.WriteAttributeString("data", "1079");
            _writer.WriteEndElement(); //idmap
            _writer.WriteEndElement(); //shapelayout

            //v:shapetype
            PictureFrameType type = new PictureFrameType();

            type.Convert(new VMLShapeTypeMapping(_ctx, _writer));

            foreach (ArrayList VMLEntry in VMLEntriesList)
            {
                bse = (BlipStoreEntry)VMLEntry[0];
                ShapeOptions options = (ShapeOptions)VMLEntry[2];
                Rectangle    bounds  = (Rectangle)VMLEntry[3];
                string       spid    = (string)VMLEntry[4];
                Point        size    = (Point)VMLEntry[5];

                ImagePart imgPart = copyPicture(bse, ref size);
                if (imgPart != null)
                {
                    //v:shape
                    _writer.WriteStartElement("v", "shape", OpenXmlNamespaces.VectorML);
                    _writer.WriteAttributeString("id", spid);
                    _writer.WriteAttributeString("type", "#" + VMLShapeTypeMapping.GenerateTypeId(type));

                    StringBuilder style = new StringBuilder();


                    style.Append("position:absolute;");
                    style.Append("left:" + (new EmuValue(Utils.MasterCoordToEMU(bounds.Left)).ToPoints()).ToString() + "pt;");
                    style.Append("top:" + (new EmuValue(Utils.MasterCoordToEMU(bounds.Top)).ToPoints()).ToString() + "pt;");
                    style.Append("width:").Append(new EmuValue(Utils.MasterCoordToEMU(bounds.Width)).ToPoints()).Append("pt;");
                    style.Append("height:").Append(new EmuValue(Utils.MasterCoordToEMU(bounds.Height)).ToPoints()).Append("pt;");
                    _writer.WriteAttributeString("style", style.ToString());

                    foreach (ShapeOptions.OptionEntry entry in options.OptionsByID.Values)
                    {
                        switch (entry.pid)
                        {
                        //BORDERS

                        case ShapeOptions.PropertyId.borderBottomColor:
                            RGBColor bottomColor = new RGBColor((int)entry.op, RGBColor.ByteOrder.RedFirst);
                            _writer.WriteAttributeString("o", "borderbottomcolor", OpenXmlNamespaces.Office, "#" + bottomColor.SixDigitHexCode);
                            break;

                        case ShapeOptions.PropertyId.borderLeftColor:
                            RGBColor leftColor = new RGBColor((int)entry.op, RGBColor.ByteOrder.RedFirst);
                            _writer.WriteAttributeString("o", "borderleftcolor", OpenXmlNamespaces.Office, "#" + leftColor.SixDigitHexCode);
                            break;

                        case ShapeOptions.PropertyId.borderRightColor:
                            RGBColor rightColor = new RGBColor((int)entry.op, RGBColor.ByteOrder.RedFirst);
                            _writer.WriteAttributeString("o", "borderrightcolor", OpenXmlNamespaces.Office, "#" + rightColor.SixDigitHexCode);
                            break;

                        case ShapeOptions.PropertyId.borderTopColor:
                            RGBColor topColor = new RGBColor((int)entry.op, RGBColor.ByteOrder.RedFirst);
                            _writer.WriteAttributeString("o", "bordertopcolor", OpenXmlNamespaces.Office, "#" + topColor.SixDigitHexCode);
                            break;
                        }
                    }

                    //v:imageData
                    _writer.WriteStartElement("v", "imagedata", OpenXmlNamespaces.VectorML);
                    _writer.WriteAttributeString("o", "relid", OpenXmlNamespaces.Office, imgPart.RelIdToString);
                    _writer.WriteAttributeString("o", "title", OpenXmlNamespaces.Office, "");
                    _writer.WriteEndElement(); //imagedata

                    //close v:shape
                    _writer.WriteEndElement();
                }
            }

            _writer.WriteEndElement(); //xml
            _writer.WriteEndDocument();
            _writer.Flush();
        }