0

こんにちは、いくつかの .mp3 曲をロードし、カバーのサイズをバイト単位で必要なサイズに変更する小さなアプリを作成しています。
必要以上の解像度になるまで実際の解像度を変更するのが最善だと思います。しかし、その方法やID3の写真を保存する方法が本当にわかりません。

曲は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);
                    }
                }
            }            
}
4

1 に答える 1

1

Dataプロパティは、生のArrayList<byte>画像ファイルを表す です。最後のバイトを切り取ってサイズを小さくすることは、最後の半分を削除するか、本を半分に切って MP3 を縮小するようなものです。画像データを取得し、それを画像表現 (たとえばSystem.Drawing.Image) に変換し、その画像をスケーリングし、バイト配列に変換して、picture 属性に戻す必要があります。次のようになります。

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

画像のサイズを変更する方法、出力形式を選択する方法などに関して、いくつかの作業を行う必要があります。

于 2012-06-15T23:06:34.617 に答える