示例#1
0
        private void WriteArtwork(IntPtr tagsPtr)
        {
            NativeMethods.MP4TagArtwork newArtwork = new NativeMethods.MP4TagArtwork();

            MemoryStream stream = new MemoryStream();

            this.artwork.Save(stream, this.ArtworkFormat);
            byte[] artworkBytes = stream.ToArray();

            newArtwork.data = Marshal.AllocHGlobal(artworkBytes.Length);
            newArtwork.size = artworkBytes.Length;
            Marshal.Copy(artworkBytes, 0, newArtwork.data, artworkBytes.Length);

            if (this.ArtworkFormat.Equals(ImageFormat.Bmp))
            {
                newArtwork.type = NativeMethods.ArtworkType.Bmp;
            }
            else if (this.ArtworkFormat.Equals(ImageFormat.Jpeg))
            {
                newArtwork.type = NativeMethods.ArtworkType.Jpeg;
            }
            else if (this.ArtworkFormat.Equals(ImageFormat.Gif))
            {
                newArtwork.type = NativeMethods.ArtworkType.Gif;
            }
            else if (this.ArtworkFormat.Equals(ImageFormat.Png))
            {
                newArtwork.type = NativeMethods.ArtworkType.Png;
            }
            else
            {
                newArtwork.type = NativeMethods.ArtworkType.Undefined;
            }

            IntPtr newArtworkPtr = Marshal.AllocHGlobal(Marshal.SizeOf(newArtwork));

            Marshal.StructureToPtr(newArtwork, newArtworkPtr, false);
            if (this.ArtworkCount == 0)
            {
                NativeMethods.MP4TagsAddArtwork(tagsPtr, newArtworkPtr);
            }
            else
            {
                NativeMethods.MP4TagsSetArtwork(tagsPtr, 0, newArtworkPtr);
            }

            Marshal.FreeHGlobal(newArtwork.data);
            Marshal.FreeHGlobal(newArtworkPtr);
        }
示例#2
0
        private void ReadArtwork(IntPtr artworkStructurePointer)
        {
            if (artworkStructurePointer == IntPtr.Zero)
            {
                return;
            }

            NativeMethods.MP4TagArtwork artwork = artworkStructurePointer.ReadStructure <NativeMethods.MP4TagArtwork>();
            byte[] artworkBuffer = new byte[artwork.size];
            Marshal.Copy(artwork.data, artworkBuffer, 0, artwork.size);
            this.artworkStream = new MemoryStream(artworkBuffer);
            this.artwork       = Image.FromStream(this.artworkStream);

            switch (artwork.type)
            {
            case NativeMethods.ArtworkType.Bmp:
                this.ArtworkFormat = ImageFormat.Bmp;
                break;

            case NativeMethods.ArtworkType.Gif:
                this.ArtworkFormat = ImageFormat.Gif;
                break;

            case NativeMethods.ArtworkType.Jpeg:
                this.ArtworkFormat = ImageFormat.Jpeg;
                break;

            case NativeMethods.ArtworkType.Png:
                this.ArtworkFormat = ImageFormat.Png;
                break;

            default:
                this.ArtworkFormat = ImageFormat.MemoryBmp;
                break;
            }
        }