tag:crieit.net,2005:https://crieit.net/tags/WindowsAPICodePack/feed
「WindowsAPICodePack」の記事 - Crieit
Crieitでタグ「WindowsAPICodePack」に投稿された最近の記事
2019-09-02T10:30:49+09:00
https://crieit.net/tags/WindowsAPICodePack/feed
tag:crieit.net,2005:PublicArticle/15369
2019-09-02T10:30:49+09:00
2019-09-02T10:30:49+09:00
https://crieit.net/posts/C-WindowsAPICodePack
【C#】WindowsAPICodePackで、各種ファイルのサムネイルを表示してみる。
<p>Windowsフォームに画像を表示するのに、<br />
画像ファイルであれば特に何も考えずに表示できますが、<br />
それ以外のファイルでサムネイルを表示する方法を試してみました。</p>
<p>プログラムは新規で、新たにプロジェクトを作成します。</p>
<h2 id="新規プロジェクトの作成"><a href="#%E6%96%B0%E8%A6%8F%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AE%E4%BD%9C%E6%88%90">新規プロジェクトの作成</a></h2>
<p>VisualStudio2017で新しく WindowsForm プロジェクトを作成します。<br />
今回は「SampleThumbnailView」としました。</p>
<h2 id="画面の作成"><a href="#%E7%94%BB%E9%9D%A2%E3%81%AE%E4%BD%9C%E6%88%90">画面の作成</a></h2>
<p><img src="https://www.doraxdora.com/wp-content/uploads/2018/09/CSharpThumbnail0000.jpg" alt="画面" /></p>
<p>画面にラベル、テキストボックス、ボタン、ピクチャーボックスを並べます。</p>
<h2 id="パッケージの追加"><a href="#%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%81%AE%E8%BF%BD%E5%8A%A0">パッケージの追加</a></h2>
<p>ファイルからサムネイルを作るために、別途パッケージをインストールします。</p>
<p><img src="https://www.doraxdora.com/wp-content/uploads/2018/09/CSharpThumbnail000.jpg" alt="パッケージの追加" /></p>
<p>ソリューションエクスプローラーで、「参照」を右クリック>「NuGetパッケージの管理」メニューを選択します。</p>
<p><img src="https://www.doraxdora.com/wp-content/uploads/2018/09/CSharpThumbnail001.jpg" alt="NuGetパッケージ管理" /></p>
<p>WindowsAPICodePackを入力、表示された「Microsoft-WindowsAPICodePack-Shell」をインストールします。</p>
<p><img src="https://www.doraxdora.com/wp-content/uploads/2018/09/CSharpThumbnail002.jpg" alt="変更のプレビュー" /></p>
<p>変更のプレビューが表示される場合は「OK」ボタンをクリックします。</p>
<h2 id="プログラム"><a href="#%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0">プログラム</a></h2>
<p>Form1.cs</p>
<pre><code>using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using Microsoft.WindowsAPICodePack.Shell;
namespace SampleThumbnailView
{
/// <summary>
/// メイン画面
/// </summary>
public partial class Form1 : Form
{
/// <summary>
/// 画面表示時の処理
/// </summary>
public Form1()
{
InitializeComponent();
}
/// <summary>
/// 参照ボタンクリックイベント.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_ref_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.InitialDirectory = System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
ofd.Filter = "すべてのファイル(*.*)|*.*";
ofd.FilterIndex = 2;
ofd.Title = "開くファイルを選択してください";
ofd.RestoreDirectory = true;
ofd.CheckFileExists = true;
ofd.CheckPathExists = true;
//ダイアログを表示する
if (ofd.ShowDialog() == DialogResult.OK)
{
//OKボタンがクリックされたとき、選択されたファイル名を表示する
txb_file.Text = ofd.FileName;
}
}
/// <summary>
/// 表示ボタンクリックイベント.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_read_Click(object sender, EventArgs e)
{
pcb_preview.Image = CreateThumbnail(txb_file.Text, 1);
}
/// <summary>
/// サムネイル画像を生成します.
/// </summary>
/// <param name="path"></param>
/// <param name="scale"></param>
/// <returns></returns>
private Bitmap CreateThumbnail(string path, int scale)
{
// ファイルが存在した場合
FileInfo fi = new FileInfo(path);
if (fi.Exists)
{
ShellFile shellFile = ShellFile.FromFilePath(path);
Bitmap bmp = shellFile.Thumbnail.Bitmap;
int w = (int)(bmp.Width * scale);
int h = (int)(bmp.Height * scale);
return bmp;
}
// ファイルが存在しない場合はデフォルト表示
return SampleThumbnailView.Properties.Resources.Message;
}
}
}
</code></pre>
<h2 id="起動してみる"><a href="#%E8%B5%B7%E5%8B%95%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B">起動してみる</a></h2>
<p><img src="https://www.doraxdora.com/wp-content/uploads/2018/09/CSharpThumbnail003.jpg" alt="初期表示" /></p>
<p>初期表示、「参照」ボタンをクリックします。</p>
<p><img src="https://www.doraxdora.com/wp-content/uploads/2018/09/CSharpThumbnail004.jpg" alt="ファイル選択ダイアログ" /></p>
<p>今回は試しに Json ファイルを指定してみます。</p>
<p><img src="https://www.doraxdora.com/wp-content/uploads/2018/09/CSharpThumbnail005.jpg" alt="サムネイル表示" /></p>
<p>サムネイルが表示されました。</p>
<p><img src="https://www.doraxdora.com/wp-content/uploads/2018/09/CSharpThumbnail006.jpg" alt="存在しないファイルを指定" /></p>
<p>存在しないファイルを指定した場合</p>
<p><img src="https://www.doraxdora.com/wp-content/uploads/2018/09/CSharpThumbnail007.jpg" alt="エラー表示" /></p>
<p>デフォルトの画像を表示(エラー)するようにしてみました。</p>
<h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2>
<p>単発のネタです。(多分)<br />
あまり利用シーンは少ないかもしれませんが、何かのお役に立てれば。</p>
<p>ではでは。</p>
<p>ソースはこちら。</p>
<p><a target="_blank" rel="nofollow noopener" href="https://github.com/doraxdora/SampleThumbnailView" target="_blank" rel="noopener">GitHub</a></p>
doraxdora