[フォトギャラリー & ムービーメーカー Plug in] 第7回 ~画像のアップロードまたは処理~
[フォトギャラリー & ムービーメーカーPlug in]第7回 ~画像のアップロードまたは処理~
第5回の記事で、Visual Studioを使用してプラグインのひな形を作り、第6回の記事で設定画面の表示を行いました。
今回は、画像のアップロードや、画像処理を行う部分を実装します。
[ 画像のアップロードを行うメソッド ]
フォトギャラリーまたはムービーメーカーからプラグインを呼び出すと、最初に設定画面やログイン用の画面を表示させるメソッドである ShowConfigurationSettings が呼ばれます。
そのメソッドが正常に終了した場合、次に画像のアップロードや処理を行うメソッドである PublishItem というメソッドが呼ばれます。
このPublishItemの呼び出され方は、フォトギャラリーとムービーメーカーで異なります。
フォトギャラリーの場合は、選択されている画像や動画の数に応じて、PublishItemが呼び出されます。例えば、3つの画像を選択している場合はPublishItemが3回呼ばれます。
ムービーメーカーの場合は、生成している動画は1つなので、PublishItemは1回しか呼ばれません。
[PublishItemの実装 ]
ここでは実装例として、選択された画像や動画を表示させるダイアログを実装します。
このダイアログを表示させているところで、特定のWebサイトへのアップロードや、画像の加工等を行うことができます。
今回は、プラグインの動きを把握するために、選択されたものを表示させるという処理を行います。
[ ダイアログの作成 ]
画像を表示させるための画面として、今回はWindowsフォームを使用したダイアログを作成します。
前回使用したVisual Studioのプロジェクトを立ち上げ、メニューから[プロジェクト]-[Windowsフォームの追加]を選択します。
ファイルの名前は、PublishDialog.csに変更します。
フォームデザイナが表示されたら、以下の図のようにListBox、TrackBar、PictureBox(左下の四角)、Windows Media Playerを貼り付けます。
Windows Media Playerを貼り付けるには、まずVisual Studioのツールボックスの中の適当なところを右クリックし、表示されるメニューから[アイテムの追加]を選択します。
ツールボックスアイテムの選択というダイアログが表示されますので、[COMコンポーネント]のタブをクリックし、その中にあるWindows Media Playerにチェックを入れてください。
なお、[アイテムの追加]を最初にクリックしたときは、ダイアログが表示されるまでかなり時間がかかりますので、しばらくお待ちください。
ツールボックスのコンポーネントの部分にWindows Media Playerが追加されていますので、それをフォーム上にドラッグアンドドロップしてください。
TrackBarのMaximumプロパティを100に変更しておいてください。
各コンポーネントのAnchorプロパティを設定したり、PictureBoxのBackgroundImageLayoutをStretchに変更すると見栄えが良くなりますが、これは後から設定しても構いません。
[ ダイアログ表示のメソッド ]
フォームのデザインが終わったら、ソースコード エディタを表示させて、コードの最初のusingが並んでいる部分に以下の文を追加します。
using Microsoft.WindowsLive.PublishPlugins;
using System.Xml;
using System.IO;
PublishDialogクラスの中には、以下の3つのフィールドと1つのメソッドを追加します。
private XmlDocument sessionXml;
private Stream stream;
private IPublishProgressCallback callback;
public static bool ShowPublishDialog(IWin32Window parent, XmlDocument sessionXml, Stream stream, IPublishProgressCallback callback)
{
// ここでは、プラグインの動きを確認するためダイアログの表示を行っています。
// 実際には、Webサイトへのアップロード等を行うコードを実装します。
PublishDialog pubDialog = new PublishDialog();
pubDialog.sessionXml = sessionXml;
pubDialog.stream = stream;
pubDialog.callback = callback;
pubDialog.ShowDialog(parent);
return true;
}
このメソッドは、プラグインの動きを確認するためのダイアログを表示させる処理を行っています。
実際には、このように呼び出されるメソッドの中で、画像のアップロードや加工などの処理を行います。
[ フォームの初期化時の処理 ]
Visual Studio上のフォームエディタに戻り、フォーム上の何も貼り付けていない部分をダブルクリックします。
PublishDialog_Loadというイベントハンドラが自動的に生成されますので、その中に以下の青字のコードを追加します。
private void PublishDialog_Load(object sender, EventArgs e)
{
XmlNodeList imageItems = sessionXml.SelectNodes("/PhotoGalleryPublishSession/ItemSet/Item[PerceivedType=\"image\"]/FullFilePath");
XmlNodeList videoItems = sessionXml.SelectNodes("/PhotoGalleryPublishSession/ItemSet/Item[PerceivedType=\"video\"]/FullFilePath");
if (imageItems.Count == 0 && videoItems.Count == 0)
return;
string[] imageFileNames = new string[imageItems.Count];
for (int i = 0; i < imageItems.Count; i++)
{
imageFileNames[i] = imageItems[i].InnerText;
listBox1.Items.Add("[Image] " + imageFileNames[i]);
}
string[] videoFileNames = new string[videoItems.Count];
for (int i = 0; i < videoItems.Count; i++)
{
videoFileNames[i] = videoItems[i].InnerText;
listBox1.Items.Add("[Video] " + videoFileNames[i]);
}
}
ここでは、フォトギャラリーまたはムービーメーカーから送られてくる情報を、リストボックスに追加しています。
情報は、sessionXmlの中にXMLの形式で入っています。
そのXMLを解析し、必要な情報を取得しています。
[ リストボックスをクリックしたときの処理 ]
フォームエディタに戻り、貼り付けているリストボックスをダブルクリックします。
listBox1_SelectedIndexChangedというイベントハンドラが自動的に生成されますので、その中に以下の青字のコードを追加します。
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
string type;
string fullpath;
type = listBox1.Items[listBox1.SelectedIndex].ToString().Substring(0, 7);
fullpath = listBox1.Items[listBox1.SelectedIndex].ToString().Substring(8);
if (type == "[Image]")
{
axWindowsMediaPlayer1.Visible = false;
pictureBox1.Visible = true;
pictureBox1.ImageLocation = fullpath;
}
else
{
pictureBox1.Visible = false;
axWindowsMediaPlayer1.Visible = true;
axWindowsMediaPlayer1.URL = fullpath;
}
}
ここでは、選択された項目が画像か動画かを判別し、画像の場合はピクチャーボックスを使用して表示し、動画の場合はメディアプレイヤーを使用して表示させています。
[ トラックバーをスライドさせたときの処理 ]
フォームエディタに戻り、貼り付けているトラックバーをダブルクリックします。
trackBar1_Scrollというイベントハンドラが自動的に生成されますので、その中に以下の青字のコードを追加します。
private void trackBar1_Scroll(object sender, EventArgs e)
{
callback.SetPublishProgress(trackBar1.Value);
}
このイベントハンドラでは、トラックバーの値を変化させたときに、フォトギャラリーやムービーメーカー側に実装されているSerPublishProgressというメソッドを呼び出して、プラグインを実行したときに表示されるプログレスバーの値を変化させています。
[ 画像表示用ダイアログの呼び出し ]
第5回のプロジェクトで作成したクラスライブラリのソースコードに戻り、すでにひな形を作成しているPublishItemメソッドに、青字のコードを追加します。
public bool PublishItem(IWin32Window parentWindow, string mediaObjectId, System.IO.Stream stream, System.Xml.XmlDocument sessionXml, IPublishProperties publishProperties, IPublishProgressCallback callback, System.Threading.EventWaitHandle cancelEvent)
{
// 実際にアップロードさせる部分。
// ここでは、画像を確認するためのダイアログを表示させている。
return PublishDialog.ShowPublishDialog(parentWindow, sessionXml, stream, callback);
}
ここではダイアログを表示させています。
実際には、画像のアップロード等を行う処理を実装してください。
次回は、詳細情報を表示させる処理の部分について説明します。
[フォトギャラリー & ムービーメーカーPlugin 連載]
第1回 : ~フォトギャラリーを知っていますか?~
第2回 : ~なかなか使えるムービーメーカー~
第3回 : ~プラグインとは? プラグインを作るには?~
第4回 : ~プラグインについて知っておくべきこと~
第5回 : ~プラグインに実装する6つのメソッドの用意~
第6回 : ~設定画面の表示~
第7回 : ~画像の処理またはアップロード~
マイクロソフト
田中達彦