private static Category UnpackColorCategory(byte[] data) { var category = new Category(); using (var ms = new MemoryStream(data)) using (var reader = new BinaryReader(ms)) { category.Header = ms.ReadStruct<CategoryHeader>(); for (var i = 0; i < category.Header.ColorCount; i++) { var colorRecord = UnpackColorRecord(reader); category.ColorRecords.Add(colorRecord); } //var alignCheck = reader.ReadInt32(); //Debug.Assert( alignCheck == category.Header.CategoryDataSize, "The header (and color reads) alignment is not correct." ); } return category; }
public static void InjectColor(Color? fgColor, Color? bgColor, Theme theme, Category category, ColorRecord colorRec) { var regPath = Path.Combine(ThemeReader.RegPath, theme.Guid.ToString("B"), category.Name); var reg = Registry.CurrentUser.OpenSubKey(regPath, true); var colorData = reg.GetValue("Data") as byte[]; using (var ms = new MemoryStream(colorData)) using (var bw = new BinaryWriter(ms)) { if (bgColor != null) { ms.Seek(colorRec.BackgroundPos, SeekOrigin.Begin); WriteColor(bgColor.Value, bw); } if (fgColor != null) { ms.Seek(colorRec.ForegroundPos, SeekOrigin.Begin); WriteColor(fgColor.Value, bw); } bw.Flush(); bw.Close(); var setData = ms.ToArray(); reg.SetValue("Data", setData, RegistryValueKind.Binary); } }