Ejemplo n.º 1
0
        internal static ReadOnlySpan <byte> ToBase64([NotNull] ICoverArt coverArt)
#endif
        {
            var         dataLength = 32 + coverArt.MimeType.Length + coverArt.Data.Length;
            Span <byte> buffer     = new byte[Base64.GetMaxEncodedToUtf8Length(dataLength) + 1];

            // Set the picture type as "Front Cover"
            BinaryPrimitives.WriteUInt32BigEndian(buffer, 3);

            BinaryPrimitives.WriteUInt32BigEndian(buffer.Slice(4), (uint)coverArt.MimeType.Length);
#if NETSTANDARD2_0
            fixed(char *mimeTypeAddress = coverArt.MimeType)
            fixed(byte *bufferAddress = buffer.Slice(8))
            Encoding.ASCII.GetBytes(
                mimeTypeAddress, coverArt.MimeType.Length,
                bufferAddress, coverArt.MimeType.Length);
#else
            Encoding.ASCII.GetBytes(coverArt.MimeType, buffer.Slice(8));
#endif

            BinaryPrimitives.WriteUInt32BigEndian(buffer.Slice(12 + coverArt.MimeType.Length), (uint)coverArt.Width);
            BinaryPrimitives.WriteUInt32BigEndian(buffer.Slice(16 + coverArt.MimeType.Length), (uint)coverArt.Height);
            BinaryPrimitives.WriteUInt32BigEndian(buffer.Slice(20 + coverArt.MimeType.Length), (uint)coverArt.ColorDepth);

            BinaryPrimitives.WriteUInt32BigEndian(buffer.Slice(28 + coverArt.MimeType.Length), (uint)coverArt.Data.Length);
            coverArt.Data.CopyTo(buffer.Slice(32 + coverArt.MimeType.Length));

            Base64.EncodeToUtf8InPlace(buffer, dataLength, out var bytesWritten);

            return(buffer.Slice(0, bytesWritten + 1));
        }
Ejemplo n.º 2
0
 internal CoverArtToPictureBlockAdapter(ICoverArt coverArt)
 {
     SetData(coverArt.Data);
     SetType(PictureType.CoverFront);
     SetMimeType(coverArt.MimeType);
     SetWidth(coverArt.Width);
     SetHeight(coverArt.Height);
     SetColorDepth(coverArt.ColorDepth);
 }
Ejemplo n.º 3
0
        public static ICoverArt ConvertToLossy([NotNull] ICoverArt coverArt)
        {
            if (coverArt == null)
            {
                throw new ArgumentNullException(nameof(coverArt));
            }

            if (!coverArt.Lossless)
            {
                return(coverArt);
            }

            using (var tempStream = new MemoryStream())
                using (var image = Image.Load(coverArt.Data))
                {
                    image.SaveAsJpeg(tempStream);
                    tempStream.Position = 0;
                    return(new CoverArt(tempStream));
                }
        }
Ejemplo n.º 4
0
 internal static unsafe ReadOnlySpan <byte> ToBase64([NotNull] ICoverArt coverArt)
Ejemplo n.º 5
0
 internal CoverAtom(ICoverArt coverArt) => Value = coverArt;
Ejemplo n.º 6
0
 public CoverAtom(ReadOnlySpan <byte> data)
 {
     // There could be more than one data atom. Ignore all but the first.
     Value = CoverArtFactory.GetOrCreate(data.Slice(24,
                                                    (int)BinaryPrimitives.ReadUInt32BigEndian(data.Slice(8, 4)) - 16));
 }
Ejemplo n.º 7
0
 internal CoverAtom([NotNull] ICoverArt coverArt)
 {
     Value = coverArt;
 }