Skip to content

Instantly share code, notes, and snippets.

@loftkun
Last active May 10, 2019 12:31
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save loftkun/ebcc1333f9f9534e945c2868403a9d94 to your computer and use it in GitHub Desktop.
20190510-01
//再生イベント時に呼び出されるメソッド
void iTunes_OnPlayerPlayEvent(object iTrack)
{
//再生中のトラック情報を取得
IITTrack track = (IITTrack)iTrack;
//ラベル用テキストを設定
AlbumName = track.Album;
TrackInfo = track.TrackNumber + " / " + track.TrackCount;
Artist = track.Artist;
TrackName = track.Name;
//主コメントに送信
if (_host != null)
{
_host.SendOwnerComment(MainComment.Text);
}
//アートワークコレクションを取得
IITArtworkCollection artwork = track.Artwork;
if (artwork != null && artwork.Count != 0)
{
int artworkCount = 0;
foreach (IITArtwork a in artwork)
{
//ぶっちゃけアートワークは1個でいいので先頭だけを使用
artworkCount++;
if (artworkCount > 1) break;
//フォーマットに応じて保存先パスの拡張子を変更
String ext;
if (a.Format == ITArtworkFormat.ITArtworkFormatJPEG)
ext = "jpg";
else if (a.Format == ITArtworkFormat.ITArtworkFormatBMP)
ext = "bmp";
else if (a.Format == ITArtworkFormat.ITArtworkFormatPNG)
ext = "png";
else //フォーマット不明であればこの後の処理は行わない(稀)
{
break;
}
ArtworkPath = System.Environment.CurrentDirectory + "\\artwork." + ext;
//アートワークを取得して保存
a.SaveArtworkToFile(ArtworkPath);
//保存したアートワークを取得(ファイルに落とさないと取れないから)
Bitmap AlbumArtContent = new Bitmap(ArtworkPath);
//スケールを計算
float scale_w = ((float)AlbumArtContent.Size.Width / ArtworkImageBox.Width), scale_h = ((float)AlbumArtContent.Size.Height / ArtworkImageBox.Height);
float scale = (scale_w > scale_h) ? (1 / scale_w) : (1 / scale_h);
//描画用に大きい方のスケールに合わせてリサイズ
Bitmap canvas = new Bitmap(ArtworkImageBox.Width, ArtworkImageBox.Height);
Graphics g = Graphics.FromImage(canvas);
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.DrawImage(AlbumArtContent, 0, 0, (AlbumArtContent.Size.Width * scale), (AlbumArtContent.Size.Height * scale));
ArtworkImageBox.Image = canvas;
//もしiTunesから取ったアートワークであれば
//落とし込んだアートワークを埋め込むボタンを許可する
if (a.IsDownloadedArtwork)
{
BeginInvoke((MethodInvoker)delegate
{
this.EmbedArtworkInfoLabel.Text = "Embed Artwork?";
this.EmbedArtworkButton.Enabled = true;
this.artwork = a;
});
}
else
{
BeginInvoke((MethodInvoker)delegate
{
this.EmbedArtworkInfoLabel.Text = "Artwork has been embedded.";
this.EmbedArtworkButton.Enabled = false;
this.artwork = null;
});
}
//アルバムアートのビットマップを破棄
AlbumArtContent.Dispose();
}
}
//アートワークが存在しない場合はアートワークが存在しない旨を表示
else
{
Bitmap canvas = new Bitmap(ArtworkImageBox.Width, ArtworkImageBox.Height);
Graphics g = Graphics.FromImage(canvas);
g.DrawString("No Artwork!", new Font(FontFamily.GenericSansSerif, 14, GraphicsUnit.Point), Brushes.Black, 75, 111);
ArtworkImageBox.Image = canvas;
//アートワーク埋め込みは許可しない
BeginInvoke((MethodInvoker)delegate
{
this.EmbedArtworkInfoLabel.Text = "Artwork Not found.";
this.EmbedArtworkButton.Enabled = false;
this.artwork = null;
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment