public void ByteArrayToPrimitiveLE() { var toConvert = new byte[] { 1, 0, 0, 0, 0, 0, 0, 0 }; var toConvert2 = new byte[] { 1, 0, 0 }; var byteOrder = ByteOrder.LittleEndian; var shortResult = Convert.FromByteArray <short>(toConvert, byteOrder); var ushortResult = Convert.FromByteArray <ushort>(toConvert, byteOrder); var intResult = Convert.FromByteArray <int>(toConvert, byteOrder); var uintResult = Convert.FromByteArray <uint>(toConvert, byteOrder); var longResult = Convert.FromByteArray <long>(toConvert, byteOrder); var ulongResult = Convert.FromByteArray <ulong>(toConvert, byteOrder); var shortResult2 = Convert.FromByteArray <short>(toConvert2, byteOrder); var ushortResult2 = Convert.FromByteArray <ushort>(toConvert2, byteOrder); var intResult2 = Convert.FromByteArray <int>(toConvert2, byteOrder); Assert.AreEqual(0, shortResult); Assert.AreEqual(0, ushortResult); Assert.AreEqual(0, intResult); Assert.AreEqual(0U, uintResult); Assert.AreEqual(1L, longResult); Assert.AreEqual(1UL, ulongResult); Assert.AreEqual(0, shortResult2); Assert.AreEqual(0, ushortResult2); Assert.AreEqual(0x100, intResult2); }
private Color CreateColor(long value, int redBitMask, int greenBitMask, int redShift) { return(Color.FromArgb( 255, (RedDepth == 0) ? 255 : Convert.ChangeBitDepth((int)(value >> redShift & redBitMask), RedDepth, 8), (GreenDepth == 0) ? 255 : Convert.ChangeBitDepth((int)(value & greenBitMask), GreenDepth, 8), 255)); }
private Color CreateColor(long value, int alphaBitMask, int lumBitMask, int lumShift) { return(Color.FromArgb( (AlphaDepth == 0) ? 255 : Convert.ChangeBitDepth((int)(value & alphaBitMask), AlphaDepth, 8), (LuminenceDepth == 0) ? 255 : Convert.ChangeBitDepth((int)(value >> lumShift & lumBitMask), LuminenceDepth, 8), (LuminenceDepth == 0) ? 255 : Convert.ChangeBitDepth((int)(value >> lumShift & lumBitMask), LuminenceDepth, 8), (LuminenceDepth == 0) ? 255 : Convert.ChangeBitDepth((int)(value >> lumShift & lumBitMask), LuminenceDepth, 8))); }
public byte[] Save(IEnumerable <Color> colors) { byte nibbleBuffer = 0; bool writeNibble = false; var ms = new MemoryStream(); using (var bw = new BinaryWriter(ms, System.Text.Encoding.ASCII, true)) { foreach (var color in colors) { var r = (RedDepth == 0) ? 0 : Convert.ChangeBitDepth(color.R, 8, RedDepth); var g = (GreenDepth == 0) ? 0 : Convert.ChangeBitDepth(color.G, 8, GreenDepth); var rShift = GreenDepth; long value = g; value |= (uint)(r << rShift); switch (BitDepth) { case 4: if (writeNibble) { nibbleBuffer |= (byte)(value & 0xF); bw.Write(nibbleBuffer); } else { nibbleBuffer = (byte)((value & 0xF) << 4); } writeNibble = !writeNibble; break; case 8: bw.Write((byte)value); break; case 16: bw.Write(Convert.ToByteArray((ushort)value, 2, ByteOrder)); break; default: throw new InvalidOperationException($"BitDepth {BitDepth} not supported!"); } } if (writeNibble) { bw.Write(nibbleBuffer); } } return(ms.ToArray()); }
/// <inheritdoc cref="IIndexEncoding.Quantize(IEnumerable{Color},QuantizationSettings)"/> public (IEnumerable <IndexData> indices, IList <Color> palette) Quantize(IEnumerable <Color> colors, QuantizationSettings settings) { if (settings.ColorModel == ColorModel.RGBA) { settings.ColorModel = ColorModel.RGB; } var colorList = colors.ToList(); var(indices, palette) = Kolors.Quantize(colorList, settings); var alphaIndexData = indices. Zip(colorList, (x, y) => new { index = x, alpha = y.A }). Select(x => new AlphaIndexData(Convert.ChangeBitDepth(x.alpha, 8, _alphaDepth), x.index)); return(alphaIndexData, palette); }
private void CreateTempASTCFile(string astcFile, byte[] texData) { var astc = File.Create(astcFile); using (var bw = new BinaryWriter(astc, System.Text.Encoding.ASCII, true)) { bw.Write(0x5CA1AB13); // magic val bw.Write((byte)_xDim); bw.Write((byte)_yDim); bw.Write((byte)_zDim); bw.Write(Convert.ToByteArray(Width, 3, ByteOrder)); bw.Write(Convert.ToByteArray(Height, 3, ByteOrder)); bw.Write(Convert.ToByteArray(1, 3, ByteOrder)); bw.Write(texData); } astc.Dispose(); astc.Close(); }
public IEnumerable <Color> Load(byte[] tex) { using (var br = new BinaryReader(new MemoryStream(tex))) { var rShift = GreenDepth; var gBitMask = (1 << GreenDepth) - 1; var rBitMask = (1 << RedDepth) - 1; while (br.BaseStream.Position < br.BaseStream.Length) { long value; switch (BitDepth) { case 4: value = br.ReadByte(); // high nibble first yield return(CreateColor((value & 0xF0) >> 4, rBitMask, gBitMask, rShift)); yield return(CreateColor(value & 0xF, rBitMask, gBitMask, rShift)); break; case 8: value = br.ReadByte(); break; case 16: value = Convert.FromByteArray <ushort>(br.ReadBytes(2), ByteOrder); break; default: throw new InvalidOperationException($"BitDepth {BitDepth} not supported!"); } yield return(CreateColor(value, rBitMask, gBitMask, rShift)); } } }
/// <inheritdoc cref="IIndexEncoding.Load(byte[])"/> public IEnumerable <IndexData> Load(byte[] input) { var alphaShift = _indexDepth; var indexBitMask = (1 << _indexDepth) - 1; using (var br = new BinaryReader(new MemoryStream(input))) while (br.BaseStream.Position < br.BaseStream.Length) { switch (_bitDepth) { case 8: var value = br.ReadByte(); yield return(new AlphaIndexData( Convert.ChangeBitDepth(value >> alphaShift, _alphaDepth, 8), value & indexBitMask)); break; default: throw new InvalidOperationException($"IndexDepth {_indexDepth} not supported."); } } }
private static ushort From565To555(ushort value) => (ushort)(value & 0x1F | (Convert.ChangeBitDepth((value >> 5) & 0x3F, 6, 5) << 5) | (((value >> 11) & 0x1F) << 10));