public void Apply(List <ColorSchemeAtom> schemes) { _writer.WriteStartElement("a", "theme", OpenXmlNamespaces.DrawingML); _writer.WriteAttributeString("name", "dummyTheme"); _writer.WriteStartElement("a", "themeElements", OpenXmlNamespaces.DrawingML); ColorSchemeAtom s = schemes[schemes.Count - 1]; writeScheme(s); //write fontScheme writeFontScheme(); //write fmtScheme writeFmtScheme(); _writer.WriteEndElement(); // themeElements if (schemes.Count > 1) { _writer.WriteStartElement("a", "extraClrSchemeLst", OpenXmlNamespaces.DrawingML); foreach (ColorSchemeAtom scheme in schemes) { _writer.WriteStartElement("a", "extraClrScheme", OpenXmlNamespaces.DrawingML); writeScheme(scheme); _writer.WriteEndElement(); // extraClrScheme } _writer.WriteEndElement(); // extraClrSchemeLst } _writer.WriteEndElement(); // theme }
/** * @return color of the line. If color is not Set returns <code>java.awt.Color.black</code> */ public Color GetLineColor() { EscherOptRecord opt = (EscherOptRecord)GetEscherChild(_escherContainer, EscherOptRecord.RECORD_ID); EscherSimpleProperty p1 = (EscherSimpleProperty)GetEscherProperty(opt, EscherProperties.LINESTYLE__COLOR); EscherSimpleProperty p2 = (EscherSimpleProperty)GetEscherProperty(opt, EscherProperties.LINESTYLE__NOLINEDRAWDASH); int p2val = p2 == null ? 0 : p2.PropertyValue; Color clr = null; if ((p2val & 0x8) != 0 || (p2val & 0x10) != 0) { int rgb = p1 == null ? 0 : p1.PropertyValue; if (rgb >= 0x8000000) { int idx = rgb % 0x8000000; if (Sheet != null) { ColorSchemeAtom ca = Sheet.GetColorScheme(); if (idx >= 0 && idx <= 7) { rgb = ca.GetColor(idx); } } } Color tmp = new Color(rgb, true); clr = new Color(tmp.GetBlue(), tmp.GetGreen(), tmp.GetRed()); } return(clr); }
protected Color GetColor(int rgb, int alpha) { if (rgb >= 0x8000000) { int idx = rgb - 0x8000000; ColorSchemeAtom ca = Sheet.GetColorScheme(); if (idx >= 0 && idx <= 7) { rgb = ca.GetColor(idx); } } Color tmp = Color.FromArgb(rgb); return(Color.FromArgb(alpha, tmp.B, tmp.G, tmp.R)); }
public void writeBuClr(RegularContainer slide, GrColorAtom color, ref string lastColor) { if (color.IsSchemeColor) //TODO: to be fully implemented { //_writer.WriteStartElement("a", "schemeClr", OpenXmlNamespaces.DrawingML); if (slide == null) { ////TODO: what shall be used in this case (happens for default text style in presentation.xml) //_writer.WriteStartElement("a", "srgbClr", OpenXmlNamespaces.DrawingML); //_writer.WriteAttributeString("val", "000000"); //_writer.WriteEndElement(); this._writer.WriteStartElement("a", "buClr", OpenXmlNamespaces.DrawingML); this._writer.WriteStartElement("a", "schemeClr", OpenXmlNamespaces.DrawingML); switch (color.Index) { case 0x00: this._writer.WriteAttributeString("val", "bg1"); //background break; case 0x01: this._writer.WriteAttributeString("val", "tx1"); //text break; case 0x02: this._writer.WriteAttributeString("val", "dk1"); //shadow break; case 0x03: this._writer.WriteAttributeString("val", "tx1"); //title text break; case 0x04: this._writer.WriteAttributeString("val", "bg2"); //fill break; case 0x05: this._writer.WriteAttributeString("val", "accent1"); //accent1 break; case 0x06: this._writer.WriteAttributeString("val", "accent2"); //accent2 break; case 0x07: this._writer.WriteAttributeString("val", "accent3"); //accent3 break; case 0xFE: //sRGB lastColor = color.Red.ToString("X").PadLeft(2, '0') + color.Green.ToString("X").PadLeft(2, '0') + color.Blue.ToString("X").PadLeft(2, '0'); this._writer.WriteAttributeString("val", lastColor); break; case 0xFF: //undefined break; } this._writer.WriteEndElement(); this._writer.WriteEndElement(); } else { ColorSchemeAtom MasterScheme = null; var ato = slide.FirstChildWithType <SlideAtom>(); List <ColorSchemeAtom> colors; if (ato != null && Tools.Utils.BitmaskToBool(ato.Flags, 0x1 << 1) && ato.MasterId != 0) { colors = this._ctx.Ppt.FindMasterRecordById(ato.MasterId).AllChildrenWithType <ColorSchemeAtom>(); } else { colors = slide.AllChildrenWithType <ColorSchemeAtom>(); } foreach (var colorsch in colors) { if (colorsch.Instance == 1) { MasterScheme = colorsch; } } if (color.Index != 0xFF) { this._writer.WriteStartElement("a", "buClr", OpenXmlNamespaces.DrawingML); this._writer.WriteStartElement("a", "srgbClr", OpenXmlNamespaces.DrawingML); switch (color.Index) { case 0x00: //background lastColor = new RGBColor(MasterScheme.Background, RGBColor.ByteOrder.RedFirst).SixDigitHexCode; this._writer.WriteAttributeString("val", lastColor); break; case 0x01: //text lastColor = new RGBColor(MasterScheme.TextAndLines, RGBColor.ByteOrder.RedFirst).SixDigitHexCode; this._writer.WriteAttributeString("val", lastColor); break; case 0x02: //shadow lastColor = new RGBColor(MasterScheme.Shadows, RGBColor.ByteOrder.RedFirst).SixDigitHexCode; this._writer.WriteAttributeString("val", lastColor); break; case 0x03: //title lastColor = new RGBColor(MasterScheme.TitleText, RGBColor.ByteOrder.RedFirst).SixDigitHexCode; this._writer.WriteAttributeString("val", lastColor); break; case 0x04: //fill lastColor = new RGBColor(MasterScheme.Fills, RGBColor.ByteOrder.RedFirst).SixDigitHexCode; this._writer.WriteAttributeString("val", lastColor); break; case 0x05: //accent1 lastColor = new RGBColor(MasterScheme.Accent, RGBColor.ByteOrder.RedFirst).SixDigitHexCode; this._writer.WriteAttributeString("val", lastColor); break; case 0x06: //accent2 lastColor = new RGBColor(MasterScheme.AccentAndHyperlink, RGBColor.ByteOrder.RedFirst).SixDigitHexCode; this._writer.WriteAttributeString("val", lastColor); break; case 0x07: //accent3 lastColor = new RGBColor(MasterScheme.AccentAndFollowedHyperlink, RGBColor.ByteOrder.RedFirst).SixDigitHexCode; this._writer.WriteAttributeString("val", lastColor); break; case 0xFE: //sRGB lastColor = color.Red.ToString("X").PadLeft(2, '0') + color.Green.ToString("X").PadLeft(2, '0') + color.Blue.ToString("X").PadLeft(2, '0'); this._writer.WriteAttributeString("val", lastColor); break; case 0xFF: //undefined default: break; } this._writer.WriteEndElement(); this._writer.WriteEndElement(); } //_writer.WriteEndElement(); } } else { this._writer.WriteStartElement("a", "buClr", OpenXmlNamespaces.DrawingML); this._writer.WriteStartElement("a", "srgbClr", OpenXmlNamespaces.DrawingML); lastColor = color.Red.ToString("X").PadLeft(2, '0') + color.Green.ToString("X").PadLeft(2, '0') + color.Blue.ToString("X").PadLeft(2, '0'); this._writer.WriteAttributeString("val", lastColor); this._writer.WriteEndElement(); this._writer.WriteEndElement(); } }
private void writeScheme(ColorSchemeAtom scheme) { //TODO: verify the mappings; at leat accent4 - 6 are wrong this._writer.WriteStartElement("a", "clrScheme", OpenXmlNamespaces.DrawingML); this._writer.WriteAttributeString("name", "dummyScheme"); this._writer.WriteStartElement("a", "dk1", OpenXmlNamespaces.DrawingML); this._writer.WriteStartElement("a", "srgbClr", OpenXmlNamespaces.DrawingML); this._writer.WriteAttributeString("val", new RGBColor(scheme.TextAndLines, RGBColor.ByteOrder.RedFirst).SixDigitHexCode); this._writer.WriteEndElement(); // srgbClr this._writer.WriteEndElement(); // dk1 this._writer.WriteStartElement("a", "lt1", OpenXmlNamespaces.DrawingML); this._writer.WriteStartElement("a", "srgbClr", OpenXmlNamespaces.DrawingML); this._writer.WriteAttributeString("val", new RGBColor(scheme.Background, RGBColor.ByteOrder.RedFirst).SixDigitHexCode); this._writer.WriteEndElement(); // srgbClr this._writer.WriteEndElement(); // lt1 this._writer.WriteStartElement("a", "dk2", OpenXmlNamespaces.DrawingML); this._writer.WriteStartElement("a", "srgbClr", OpenXmlNamespaces.DrawingML); this._writer.WriteAttributeString("val", new RGBColor(scheme.TitleText, RGBColor.ByteOrder.RedFirst).SixDigitHexCode); this._writer.WriteEndElement(); // srgbClr this._writer.WriteEndElement(); // dk2 this._writer.WriteStartElement("a", "lt2", OpenXmlNamespaces.DrawingML); this._writer.WriteStartElement("a", "srgbClr", OpenXmlNamespaces.DrawingML); this._writer.WriteAttributeString("val", new RGBColor(scheme.Shadows, RGBColor.ByteOrder.RedFirst).SixDigitHexCode); this._writer.WriteEndElement(); // srgbClr this._writer.WriteEndElement(); // lt2 this._writer.WriteStartElement("a", "accent1", OpenXmlNamespaces.DrawingML); this._writer.WriteStartElement("a", "srgbClr", OpenXmlNamespaces.DrawingML); this._writer.WriteAttributeString("val", new RGBColor(scheme.Fills, RGBColor.ByteOrder.RedFirst).SixDigitHexCode); this._writer.WriteEndElement(); // srgbClr this._writer.WriteEndElement(); // accent1 this._writer.WriteStartElement("a", "accent2", OpenXmlNamespaces.DrawingML); this._writer.WriteStartElement("a", "srgbClr", OpenXmlNamespaces.DrawingML); this._writer.WriteAttributeString("val", new RGBColor(scheme.Accent, RGBColor.ByteOrder.RedFirst).SixDigitHexCode); this._writer.WriteEndElement(); // srgbClr this._writer.WriteEndElement(); // accent2 this._writer.WriteStartElement("a", "accent3", OpenXmlNamespaces.DrawingML); this._writer.WriteStartElement("a", "srgbClr", OpenXmlNamespaces.DrawingML); this._writer.WriteAttributeString("val", new RGBColor(scheme.Background, RGBColor.ByteOrder.RedFirst).SixDigitHexCode); this._writer.WriteEndElement(); // srgbClr this._writer.WriteEndElement(); // accent3 this._writer.WriteStartElement("a", "accent4", OpenXmlNamespaces.DrawingML); this._writer.WriteStartElement("a", "srgbClr", OpenXmlNamespaces.DrawingML); this._writer.WriteAttributeString("val", new RGBColor(scheme.Accent, RGBColor.ByteOrder.RedFirst).SixDigitHexCode); this._writer.WriteEndElement(); // srgbClr this._writer.WriteEndElement(); // accent4 this._writer.WriteStartElement("a", "accent5", OpenXmlNamespaces.DrawingML); this._writer.WriteStartElement("a", "srgbClr", OpenXmlNamespaces.DrawingML); this._writer.WriteAttributeString("val", new RGBColor(scheme.Accent, RGBColor.ByteOrder.RedFirst).SixDigitHexCode); this._writer.WriteEndElement(); // srgbClr this._writer.WriteEndElement(); // accent5 this._writer.WriteStartElement("a", "accent6", OpenXmlNamespaces.DrawingML); this._writer.WriteStartElement("a", "srgbClr", OpenXmlNamespaces.DrawingML); this._writer.WriteAttributeString("val", new RGBColor(scheme.Accent, RGBColor.ByteOrder.RedFirst).SixDigitHexCode); this._writer.WriteEndElement(); // srgbClr this._writer.WriteEndElement(); // accent6 this._writer.WriteStartElement("a", "hlink", OpenXmlNamespaces.DrawingML); this._writer.WriteStartElement("a", "srgbClr", OpenXmlNamespaces.DrawingML); this._writer.WriteAttributeString("val", new RGBColor(scheme.AccentAndHyperlink, RGBColor.ByteOrder.RedFirst).SixDigitHexCode); this._writer.WriteEndElement(); // srgbClr this._writer.WriteEndElement(); // hlink this._writer.WriteStartElement("a", "folHlink", OpenXmlNamespaces.DrawingML); this._writer.WriteStartElement("a", "srgbClr", OpenXmlNamespaces.DrawingML); this._writer.WriteAttributeString("val", new RGBColor(scheme.AccentAndFollowedHyperlink, RGBColor.ByteOrder.RedFirst).SixDigitHexCode); this._writer.WriteEndElement(); // srgbClr this._writer.WriteEndElement(); // folHlink this._writer.WriteEndElement(); // clrScheme }
public static string getRGBColorFromOfficeArtCOLORREF(uint value, RegularContainer slide, DIaLOGIKa.b2xtranslator.OfficeDrawing.ShapeOptions so, ref string SchemeType) { byte[] bytes = BitConverter.GetBytes(value); bool fPaletteIndex = (bytes[3] & 1) != 0; bool fPaletteRGB = (bytes[3] & (1 << 1)) != 0; bool fSystemRGB = (bytes[3] & (1 << 2)) != 0; bool fSchemeIndex = (bytes[3] & (1 << 3)) != 0; bool fSysIndex = (bytes[3] & (1 << 4)) != 0; List <ColorSchemeAtom> colors = slide.AllChildrenWithType <ColorSchemeAtom>(); ColorSchemeAtom MasterScheme = null; foreach (ColorSchemeAtom color in colors) { if (color.Instance == 1) { MasterScheme = color; } } if (fSysIndex) { UInt16 val = BitConverter.ToUInt16(bytes, 0); string result = ""; switch (val & 0x00ff) { case 0xF0: //shape fill color if (so.OptionsByID.ContainsKey(DIaLOGIKa.b2xtranslator.OfficeDrawing.ShapeOptions.PropertyId.fillColor)) { result = getRGBColorFromOfficeArtCOLORREF(so.OptionsByID[DIaLOGIKa.b2xtranslator.OfficeDrawing.ShapeOptions.PropertyId.fillColor].op, slide, so); } else { result = new RGBColor(MasterScheme.Fills, RGBColor.ByteOrder.RedFirst).SixDigitHexCode; //TODO: find out which color to use in this case } break; case 0xF1: //shape line color if it is a line else shape fill color TODO!! if (so.FirstAncestorWithType <OfficeDrawing.ShapeContainer>().FirstChildWithType <OfficeDrawing.Shape>().Instance == 1) { if (so.OptionsByID.ContainsKey(DIaLOGIKa.b2xtranslator.OfficeDrawing.ShapeOptions.PropertyId.fillColor)) { result = getRGBColorFromOfficeArtCOLORREF(so.OptionsByID[DIaLOGIKa.b2xtranslator.OfficeDrawing.ShapeOptions.PropertyId.fillColor].op, slide, so); } else { result = new RGBColor(MasterScheme.Fills, RGBColor.ByteOrder.RedFirst).SixDigitHexCode; //TODO: find out which color to use in this case } } else { if (so.OptionsByID.ContainsKey(DIaLOGIKa.b2xtranslator.OfficeDrawing.ShapeOptions.PropertyId.lineColor)) { result = getRGBColorFromOfficeArtCOLORREF(so.OptionsByID[DIaLOGIKa.b2xtranslator.OfficeDrawing.ShapeOptions.PropertyId.lineColor].op, slide, so); } else { result = new RGBColor(MasterScheme.TextAndLines, RGBColor.ByteOrder.RedFirst).SixDigitHexCode; //TODO: find out which color to use in this case } } break; case 0xF2: //shape line color if (so.OptionsByID.ContainsKey(DIaLOGIKa.b2xtranslator.OfficeDrawing.ShapeOptions.PropertyId.lineColor)) { result = getRGBColorFromOfficeArtCOLORREF(so.OptionsByID[DIaLOGIKa.b2xtranslator.OfficeDrawing.ShapeOptions.PropertyId.lineColor].op, slide, so); } else { result = new RGBColor(MasterScheme.TextAndLines, RGBColor.ByteOrder.RedFirst).SixDigitHexCode; //TODO: find out which color to use in this case } break; case 0xF3: //shape shadow color result = getRGBColorFromOfficeArtCOLORREF(so.OptionsByID[DIaLOGIKa.b2xtranslator.OfficeDrawing.ShapeOptions.PropertyId.shadowColor].op, slide, so); break; case 0xF4: //current or last used color case 0xF5: //shape fill background color result = getRGBColorFromOfficeArtCOLORREF(so.OptionsByID[DIaLOGIKa.b2xtranslator.OfficeDrawing.ShapeOptions.PropertyId.fillBackColor].op, slide, so); break; case 0xF6: //shape line background color result = getRGBColorFromOfficeArtCOLORREF(so.OptionsByID[DIaLOGIKa.b2xtranslator.OfficeDrawing.ShapeOptions.PropertyId.lineBackColor].op, slide, so); break; case 0xF7: //shape fill color if shape contains a fill else line color result = getRGBColorFromOfficeArtCOLORREF(so.OptionsByID[DIaLOGIKa.b2xtranslator.OfficeDrawing.ShapeOptions.PropertyId.fillColor].op, slide, so); break; case 0xFF: //undefined return(""); } if (result.Length == 0) { return(""); } int red = int.Parse(result.Substring(0, 2), System.Globalization.NumberStyles.HexNumber); int green = int.Parse(result.Substring(2, 2), System.Globalization.NumberStyles.HexNumber); int blue = int.Parse(result.Substring(4, 2), System.Globalization.NumberStyles.HexNumber); int v = (int)bytes[2]; int res; return(result); //switch (val & 0xff00) //{ // case 0x100: // if (blue == 0xff) return result; // if (blue == 0x00) return "000000"; // res = int.Parse(result, System.Globalization.NumberStyles.HexNumber); // if (!so.OptionsByID.ContainsKey(DIaLOGIKa.b2xtranslator.OfficeDrawing.ShapeOptions.PropertyId.ShadowStyleBooleanProperties)) // res -= v; //this is wrong for shadow17 // if (res < 0) res = 0; // return res.ToString("X").PadLeft(6, '0'); // case 0x200: // if (blue == 0xff) return result; // if (blue == 0x00) return "FFFFFF"; // res = int.Parse(result, System.Globalization.NumberStyles.HexNumber); // res += v; // return res.ToString("X").PadLeft(6, '0'); // case 0x300: // red += v; // green += v; // blue += v; // if (red > 0xff) red = 0xff; // if (green > 0xff) green = 0xff; // if (blue > 0xff) blue = 0xff; // return red.ToString("X").PadLeft(2, '0') + green.ToString("X").PadLeft(2, '0') + blue.ToString("X").PadLeft(2, '0'); // case 0x400: // red -= v; // green -= v; // blue -= v; // if (red < 0) red = 0x0; // if (green < 0) green = 0x0; // if (blue < 0) blue = 0x0; // return red.ToString("X").PadLeft(2, '0') + green.ToString("X").PadLeft(2, '0') + blue.ToString("X").PadLeft(2, '0'); // case 0x500: // red = v - red; // green = v - green; // blue = v - blue; // if (red < 0) red = 0x0; // if (green < 0) green = 0x0; // if (blue < 0) blue = 0x0; // return red.ToString("X").PadLeft(2, '0') + green.ToString("X").PadLeft(2, '0') + blue.ToString("X").PadLeft(2, '0'); // default: // break; //} } if (fSchemeIndex) { //red is the index to the color scheme //List<ColorSchemeAtom> colors = slide.AllChildrenWithType<ColorSchemeAtom>(); //ColorSchemeAtom MasterScheme = null; //foreach (ColorSchemeAtom color in colors) //{ // if (color.Instance == 1) MasterScheme = color; //} switch (bytes[0]) { case 0x00: //background SchemeType = "bg1"; return(new RGBColor(MasterScheme.Background, RGBColor.ByteOrder.RedFirst).SixDigitHexCode); case 0x01: //text SchemeType = "tx1"; return(new RGBColor(MasterScheme.TextAndLines, RGBColor.ByteOrder.RedFirst).SixDigitHexCode); case 0x02: //shadow return(new RGBColor(MasterScheme.Shadows, RGBColor.ByteOrder.RedFirst).SixDigitHexCode); case 0x03: //title return(new RGBColor(MasterScheme.TitleText, RGBColor.ByteOrder.RedFirst).SixDigitHexCode); case 0x04: //fill SchemeType = "accent1"; return(new RGBColor(MasterScheme.Fills, RGBColor.ByteOrder.RedFirst).SixDigitHexCode); case 0x05: //accent1 SchemeType = "accent2"; return(new RGBColor(MasterScheme.Accent, RGBColor.ByteOrder.RedFirst).SixDigitHexCode); case 0x06: //accent2 SchemeType = "hlink"; return(new RGBColor(MasterScheme.AccentAndHyperlink, RGBColor.ByteOrder.RedFirst).SixDigitHexCode); case 0x07: //accent3 return(new RGBColor(MasterScheme.AccentAndFollowedHyperlink, RGBColor.ByteOrder.RedFirst).SixDigitHexCode); case 0xFE: //sRGB return(bytes[0].ToString("X").PadLeft(2, '0') + bytes[1].ToString("X").PadLeft(2, '0') + bytes[3].ToString("X").PadLeft(2, '0')); case 0xFF: //undefined break; } } return(bytes[0].ToString("X").PadLeft(2, '0') + bytes[1].ToString("X").PadLeft(2, '0') + bytes[2].ToString("X").PadLeft(2, '0')); }