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; } } }
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(); } } }
// ---------- 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); }