private void Encode_A8(byte[] bgrData) { if (bgrData.Length != 3 * Width * Height) { throw new ArgumentException("RGB Data size is invalid", nameof(bgrData)); } var gscData = new byte[bgrData.Length]; Buffer.BlockCopy(bgrData, 0, gscData, 0, bgrData.Length); GraphicUtils.BgrDataToGrayScale(gscData); GraphicUtils.RotatebgrDataCounterClockwise(gscData, 3 * Width); var p = GreatestCommonMultiple(Width, 8) / 8; if (p == 0) { p = 1; } for (uint i = 0; i < Data.Length; i += 1) { uint x, y; DecToCoord(i % 64, out x, out y); uint tile = i / 64; x += (uint)(tile % p) * 8; y += (uint)(tile / p) * 8; var idx = 3 * (y * Width + x); var g = gscData[idx + 0]; Data[i] = g; } }
private byte[] Decode_A8() { var bgrData = new byte[Width * Height * 3]; var p = GreatestCommonMultiple(Width, 8) / 8; if (p == 0) { p = 1; } for (uint i = 0; i < Data.Length; i += 1) { byte a = Data[i + 0]; // 8 uint x, y; DecToCoord(i % 64, out x, out y); uint tile = i / 64; x += (uint)(tile % p) * 8; y += (uint)(tile / p) * 8; var idx = 3 * (y * Width + x); bgrData[idx + 0] = a; bgrData[idx + 1] = a; bgrData[idx + 2] = a; } GraphicUtils.RotatebgrDataClockwise(bgrData, 3 * Width); return(bgrData); }