Esempio n. 1
0
        public void ReadPicture(Stream s, ReadTagParams readTagParams)
        {
            int  picturePosition;
            long initPosition = s.Position;
            VorbisMetaDataBlockPicture block = ReadMetadataBlockPicture(s);

            if (block.picType.Equals(PictureInfo.PIC_TYPE.Unsupported))
            {
                addPictureToken(getImplementedTagType(), (byte)block.nativePicCode);
                picturePosition = takePicturePosition(getImplementedTagType(), (byte)block.nativePicCode);
            }
            else
            {
                addPictureToken(block.picType);
                picturePosition = takePicturePosition(block.picType);
            }

            if (readTagParams.ReadPictures)
            {
                s.Seek(initPosition + block.picDataOffset, SeekOrigin.Begin);
                PictureInfo picInfo = PictureInfo.fromBinaryData(s, block.picDataLength, block.picType, getImplementedTagType(), block.nativePicCode, picturePosition);
                picInfo.Description = block.description;
                tagData.Pictures.Add(picInfo);

                if (!tagExists)
                {
                    tagExists = true;
                }
            }
        }
Esempio n. 2
0
        public void ReadPicture(Stream s, ReadTagParams readTagParams)
        {
            int  picturePosition;
            long initPosition = s.Position;
            VorbisMetaDataBlockPicture block = ReadMetadataBlockPicture(s);

            if (block.picType.Equals(PictureInfo.PIC_TYPE.Unsupported))
            {
                addPictureToken(getImplementedTagType(), (byte)block.nativePicCode);
                picturePosition = takePicturePosition(getImplementedTagType(), (byte)block.nativePicCode);
            }
            else
            {
                addPictureToken(block.picType);
                picturePosition = takePicturePosition(block.picType);
            }

            if (readTagParams.ReadPictures || readTagParams.PictureStreamHandler != null)
            {
                PictureInfo picInfo = new PictureInfo(ImageUtils.GetImageFormatFromMimeType(block.mimeType), block.picType, getImplementedTagType(), block.nativePicCode, picturePosition);
                picInfo.Description = block.description;
                picInfo.PictureData = new byte[block.picDataLength];
                s.Seek(initPosition + block.picDataOffset, SeekOrigin.Begin);
                s.Read(picInfo.PictureData, 0, block.picDataLength);

                tagData.Pictures.Add(picInfo);

                if (!tagExists)
                {
                    tagExists = true;
                }


                if (readTagParams.PictureStreamHandler != null)
                {
                    MemoryStream mem = new MemoryStream(picInfo.PictureData);
                    readTagParams.PictureStreamHandler(ref mem, picInfo.PicType, picInfo.NativeFormat, picInfo.TagType, picInfo.NativePicCode, picInfo.Position);
                    mem.Close();
                }
            }
        }
Esempio n. 3
0
        // ---------- SPECIFIC MEMBERS

        public static VorbisMetaDataBlockPicture ReadMetadataBlockPicture(Stream s)
        {
            VorbisMetaDataBlockPicture result = new VorbisMetaDataBlockPicture();
            int stringLen;

            BinaryReader r = new BinaryReader(s);

            result.nativePicCode = StreamUtils.ReverseInt32(r.ReadInt32());
            result.picType       = ID3v2.DecodeID3v2PictureType(result.nativePicCode);
            stringLen            = StreamUtils.ReverseInt32(r.ReadInt32());
            result.mimeType      = Utils.Latin1Encoding.GetString(r.ReadBytes(stringLen));
            stringLen            = StreamUtils.ReverseInt32(r.ReadInt32());
            result.description   = Encoding.UTF8.GetString(r.ReadBytes(stringLen));
            result.width         = StreamUtils.ReverseInt32(r.ReadInt32());
            result.height        = StreamUtils.ReverseInt32(r.ReadInt32());
            result.colorDepth    = StreamUtils.ReverseInt32(r.ReadInt32());
            result.colorNum      = StreamUtils.ReverseInt32(r.ReadInt32());
            result.picDataLength = StreamUtils.ReverseInt32(r.ReadInt32());

            result.picDataOffset = 4 + 4 + result.mimeType.Length + 4 + result.description.Length + 4 + 4 + 4 + 4 + 4;

            return(result);
        }