嗨我正在制作一个小应用程序',它会加载一些.mp3歌曲,调整大小将其封面加到所需的字节大小。
我认为最好的方法是改变真正的分辨率,直到它不低于要求。但我真的不知道怎么做或如何保存ID3 pic'。
歌曲从 OpenFileDialog 加载,所需大小从简单的 textBox 加载。
我正在使用taglib#和C#(WPF),但如果有更好的库来解决这个问题,我将无法抗拒。
这是我的例子,它真正调整了图片的大小,但它缩短了它。
private void MenuItem_Click(object sender, RoutedEventArgs e)
{
int size;
try
{
size = int.Parse(textBox1.Text);
}
catch (FormatException)
{
MessageBox.Show("Enter requiered size!", "Err");
return;
}
Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
dlg.DefaultExt = ".mp3";
dlg.Filter = "mp3 files (.mp3) | *.mp3";
dlg.Multiselect = true;
Nullable<bool> result = dlg.ShowDialog();
if (result == true)
{
foreach (string file in dlg.FileNames)
{
var song = TagLib.File.Create(file);
if (song.Tag.Pictures.Length > 0)
{
// var bin = (byte[])(song.Tag.Pictures[0].Data.Data);
song.Tag.Pictures[0].Data.Resize(size);
}
}
}
}
答案 0 :(得分:1)
Data
属性是表示原始图像文件的ArrayList<byte>
。通过砍掉最后一个字节来减小尺寸就像缩小MP3一样,删除后半部分或将书籍缩小一半。您需要获取图像数据,将其转换为图像表示(例如,System.Drawing.Image
),缩放该图像,将其转换为字节数组,然后将其存储在图片属性中。它看起来像是:
MemoryStream inputStream = new MemoryStream(song.Tag.Pictures[0].Data.Data);
Image picture = Image.FromStream(inputStream);
// Scale the image: http://www.codeproject.com/Articles/2941/Resizing-a-Photographic-image-with-GDI-for-NET
MemoryStream ouputStream = new MemoryStream();
picture.Save(outputStream, imageFormat);
song.Tag.Pictures[0].Data = outputStream.ToArray();
关于如何调整图像大小,如何选择输出格式等,你必须做一些工作。