Как узнать обложку медиафайла? - C#
Формулировка задачи:
Использую WMPLib. Как узнать обложку mp3 файла? В идеале без использования TagLib.
Решение задачи: «Как узнать обложку медиафайла?»
textual
Листинг программы
using System;
using System.IO;
using System.Linq;
class SimpleExtractor
{
// find position of subarray
public static int GetPos(byte[] source, byte[] pattern)
{
for (int i = 0; i < source.Length; i++)
{
if (i + pattern.Length < source.Length)
{
byte[] result = new byte[pattern.Length];
Array.Copy(source, i, result, 0, pattern.Length);
if (result.
SequenceEqual(pattern))
{
return i;
}
}
}
return -1;
}
// extract subarray
public static bool GetSubArray(byte[] source, byte[] beg,
byte[] end, out byte[] subArr)
{
int stPos = 0,
finPos = 0;
subArr = null;
stPos = GetPos(source, beg);
if (stPos != -1)
if ((finPos = GetPos(source, end)) != -1)
{
finPos += end.Length;
subArr = source.Skip(stPos).Take(finPos - stPos).ToArray();
return true;
}
return false;
}
static void Main()
{
// JPEG signature
//-----------------------------------
byte[] start = new byte[] { 0xFF, 0xD8, 0xFF, 0xE0 }; // start jpeg
byte[] end = new byte[] { 0xFF, 0xD9 }; // end jpeg
try
{
// read file
//-----------------------------------
byte[] barray = File.ReadAllBytes("E:\\music\\Iggy_Azalea-Black_Widow_feat._Rita_Ora_.mp3");
byte[] imgArr = null;
//-----------------------------------
// extract byte array of image
if (GetSubArray(barray, start, end, out imgArr))
// save to file
File.WriteAllBytes("D:\\NewImage.jpeg", imgArr);
}
catch (Exception ex)
{
Console.Write(ex.Message);
}
Console.ReadKey(true);
}
}