public Pattern() { Data = new byte[Width, Height]; Author = new User(); Title = "Untitled"; Type = PatternType.Normal; ColorPalette = new Palette(); }
private void LoadFromStream(Stream stream) { BinaryReader binaryReader = new BinaryReader(stream); NibbleReader nibbleReader = new NibbleReader(binaryReader); byte type = nibbleReader.ReadByte(); if (type != 0x40) throw new NotImplementedException(); int size = nibbleReader.ReadByte(); size = (size << 4) | nibbleReader.ReadNibble(); if (size != 0x26C) throw new InvalidDataException("Size is invalid."); Title = nibbleReader.ReadString(42); Author = new User(nibbleReader); ColorPalette = new Palette(nibbleReader); nibbleReader.ReadByte(); // Unknown nibbleReader.ReadByte(); // Unknown, 0x0A Type = (PatternType)nibbleReader.ReadByte(); nibbleReader.ReadByte(); // Unknown, 0x00 nibbleReader.ReadByte(); // Unknown, 0x00 for (int j = 0; j < Data.GetLength(1); j++) for (int i = 0; i < Data.GetLength(0); i += 2) { Data[i + 1, j] = nibbleReader.ReadNibble(); Data[i, j] = nibbleReader.ReadNibble(); } }
private void LoadFromPixelData(byte[] data) { Title = "Untitled"; Author = new User("Someone", "Nowhere", new byte[] { 0, 0, 0, 0, 0, 0 }); Type = PatternType.Normal; Color[,] sourceImage = new Color[Width, Height]; for (int i = 0; i < Width; i++) for (int j = 0; j < Height; j++) sourceImage[i, j] = new Color(data[(j * Height + i) * 3 + 2], data[(j * Height + i) * 3 + 1], data[(j * Height + i) * 3 + 0]); HashSet<Color> bestPalette = CreateBestPalette(sourceImage); ColorPalette = new Palette(); int k = 0; foreach (Color c in bestPalette) ColorPalette.SetColor(k++, c); for (int i = 0; i < Width; i++) for (int j = 0; j < Height; j++) Data[i, j] = ColorPalette.GetNearestColorIndex(sourceImage[i, j]); }