<?xml version="1.0" encoding="UTF-8" ?>
		<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
		         xmlns="http://purl.org/rss/1.0/"
		         xmlns:dc="http://purl.org/dc/elements/1.1/"
		         xmlns:content="http://purl.org/rss/1.0/modules/content/"
		         xmlns:cc="http://web.resource.org/cc/" xml:lang="ja">
		<channel rdf:about="http://tmp.junkbox.info/index.php?mode=rss">
		<title>まちみのな</title>
		<link>http://tmp.junkbox.info/</link>
		<description>機械知能とその周辺。</description>
		<dc:language>ja</dc:language>
		<items>
		<rdf:Seq>
		<rdf:li rdf:resource="http://tmp.junkbox.info/e48.html" />
		<rdf:li rdf:resource="http://tmp.junkbox.info/e47.html" />
		<rdf:li rdf:resource="http://tmp.junkbox.info/e46.html" />
		<rdf:li rdf:resource="http://tmp.junkbox.info/e45.html" />
		<rdf:li rdf:resource="http://tmp.junkbox.info/e44.html" />
		<rdf:li rdf:resource="http://tmp.junkbox.info/e43.html" />
		<rdf:li rdf:resource="http://tmp.junkbox.info/e42.html" />
		<rdf:li rdf:resource="http://tmp.junkbox.info/e41.html" />
		</rdf:Seq>
		</items>
		</channel>
		
		<item rdf:about="http://tmp.junkbox.info/e48.html"><link>http://tmp.junkbox.info/e48.html</link><title>C#で文字認識を行う</title><description>Microsoft Office をインストールすると、実は OCR ソフトがついてきます。C# からの利用も簡単です。下記のコードを、Visual C# Express 2005 または 2008 で作成し、参照設定に、 Microsoft Office Document Imaging 11.0 Type Library (MDIVWCTL.DLL) を追加してビルドしてください。[:ボックス１:] ソースコードのダウンロード (Visual C# Express 2008 用)v1.0 (2008/07/21)&lt;br</description><content:encoded><![CDATA[Microsoft Office をインストールすると、実は OCR ソフトがついてきます。C# からの利用も簡単です。下記のコードを、Visual C# Express 2005 または 2008 で作成し、参照設定に、 Microsoft Office Document Imaging 11.0 Type Library (MDIVWCTL.DLL) を追加してビルドしてください。<br /><br />[:ボックス１:] ソースコードのダウンロード (Visual C# Express 2008 用)<br /><a href="files/OCRTestv1.0.zip">v1.0 (2008/07/21)</a><br /><br /><div class="code">using&nbsp;System;<br />using&nbsp;System.Text;<br /><br />///&nbsp;<summary><br />///&nbsp;OCR&nbsp;with&nbsp;MicrosoftR&nbsp;Office&nbsp;By&nbsp;Martin&nbsp;Welker&nbsp;(CodeProject)<br />///&nbsp;に基づく&nbsp;Office&nbsp;2003&nbsp;に依存したOCR処理。<br />///&nbsp;Microsoft&nbsp;Office&nbsp;Document&nbsp;Imaging&nbsp;11.0&nbsp;Type&nbsp;Library<br />///&nbsp;(MDIVWCTL.DLL)&nbsp;が別途必要<br />///&nbsp;Office&nbsp;2007&nbsp;ではこのライブラリはデフォルトではインストールされない<br />///&nbsp;ので、インストール時に、<br />///&nbsp;Microsoft&nbsp;Office&nbsp;Document&nbsp;Imaging<br />///&nbsp;&nbsp;+&nbsp;Microsoft&nbsp;Office&nbsp;Document&nbsp;Imaging&nbsp;Writer&nbsp;<br />///&nbsp;を追加選択しておく必要がある。<br />///&nbsp;<seealso&nbsp;cref="http://www.codeproject.com/KB/office/modi.aspx"/><br />///&nbsp;</summary><br />namespace&nbsp;OfficeOCRTest<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Program<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;void&nbsp;Main(string[]&nbsp;args)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(args.Length&nbsp;!=&nbsp;1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("OfficeOCRTest&nbsp;[画像ファイル名]");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;filename&nbsp;=&nbsp;args[0];<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MODI.Document&nbsp;doc&nbsp;=&nbsp;new&nbsp;MODI.Document();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doc.Create(filename);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;読み取り言語を指定してOCR処理。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;英数字のみとわかっている場合には、<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;miLANG_ENGLISH&nbsp;を指定したほうが精度が高い<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doc.OCR(MODI.MiLANGUAGES.miLANG_JAPANESE,&nbsp;false,&nbsp;false);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;複数ページを持つ画像フォーマットに対応<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;doc.Images.Count;&nbsp;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MODI.Image&nbsp;img&nbsp;=&nbsp;(MODI.Image)doc.Images[i];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MODI.Layout&nbsp;layout&nbsp;=&nbsp;img.Layout;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("*&nbsp;1ページ分のデータ&nbsp;*");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(layout.Text);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;同じデータを単語ごとに分割して出力<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuilder&nbsp;str&nbsp;=&nbsp;new&nbsp;StringBuilder();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;j&nbsp;=&nbsp;0;&nbsp;j&nbsp;<&nbsp;layout.Words.Count;&nbsp;j++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MODI.Word&nbsp;word&nbsp;=&nbsp;(MODI.Word)layout.Words[j];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str.Append("["&nbsp;+&nbsp;word.Text&nbsp;+&nbsp;"]");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("*&nbsp;単語に分割して出力&nbsp;*");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(str.ToString());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch(Exception&nbsp;e)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(e.Message);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /></div><br /><br />たとえば、下の画像をこのコードで読み込むと、<br /><img src="files/modi.jpg" width="480" height="126" alt="サンプル画像"><br /><br /><div class="code">F:\\> OfficeOCRTest.exe modi.jpg<br />* 1ページ分のデータ *<br />これは、 Microsoft Office Document Imaging 11 , 0 TyPe Library ( MDIVWCTL . DLL ) の利用サンプルです。<br /><br />* 単語に分割して出力 *<br />[こ][れ][は][、][Microsoft][Office][Document][Imaging][11][,][0][TyPe][Library][(][MDIVWCTL][.][DLL][)][の][利][用][サ][ン][プ][ル][で][す][。]<br /></div><br />のように認識結果が出力されます。今回のサンプルでは文字そのもののみを対象としましたが、文字の画像上の位置やフォント名なども取得可能です。詳細については、<br /><a href="http://www.codeproject.com/KB/office/modi.aspx">OCR with MicrosoftR Office By Martin Welker (CodeProject)</a><br />を参照してください。]]></content:encoded><dc:subject>技術メモ::ソフトウェア</dc:subject><dc:date>2008-07-21T01:04:03+09:00</dc:date><dc:creator>ささお</dc:creator><dc:publisher>BlognPlus</dc:publisher><dc:rights>ささお</dc:rights></item>
		<item rdf:about="http://tmp.junkbox.info/e47.html"><link>http://tmp.junkbox.info/e47.html</link><title>C#でPowerPointファイルを画像として保存する</title><description>Microsoft PowerPoint 11.0 Object Library を利用すると、PowerPointファイルの各スライドを画像として保存することが比較的容易に実現できます。画像形式としては、bmp, png jpg, gif, tif, wmf などが使えるようです。画像サイズも指定できます。なお、メタファイル(wmf)形式を指定するとベクトルデータとして出力が可能です。ただし、ファイルの画像サイズは無視されるようです。&lt;b</description><content:encoded><![CDATA[Microsoft PowerPoint 11.0 Object Library を利用すると、PowerPointファイルの各スライドを画像として保存することが比較的容易に実現できます。画像形式としては、bmp, png jpg, gif, tif, wmf などが使えるようです。画像サイズも指定できます。なお、メタファイル(wmf)形式を指定するとベクトルデータとして出力が可能です。ただし、ファイルの画像サイズは無視されるようです。<br /><br />サンプルコードは以下のような感じになります。エラー処理はあまりまじめにやっていないので、適宜追加してください。<br /><br />&nbsp;using&nbsp;System;<br />&nbsp;using&nbsp;System.IO;<br />&nbsp;using&nbsp;Microsoft.Office.Interop.PowerPoint;<br />&nbsp;using&nbsp;Microsoft.Office.Core;<br />&nbsp;<br />&nbsp;namespace&nbsp;ppt2img<br />&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Program<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;void&nbsp;Main(string[]&nbsp;args)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(args.Length&nbsp;!=&nbsp;4)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("PowerPointファイルを画像に変換します");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("ppt2img&nbsp;[PowerPointファイル]&nbsp;[画像形式]&nbsp;[幅]&nbsp;[高さ]");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("例)&nbsp;ppt2img&nbsp;test.ppt&nbsp;png&nbsp;640&nbsp;480");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;引数を読み込む<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;filename&nbsp;=&nbsp;Path.GetFullPath(args[0]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;filetype&nbsp;=&nbsp;args[1];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;width&nbsp;=&nbsp;Convert.ToInt32(args[2]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;height&nbsp;=&nbsp;Convert.ToInt32(args[3]);<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;PowerPointファイルを開く<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ApplicationClass&nbsp;app&nbsp;=&nbsp;new&nbsp;ApplicationClass();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Presentation&nbsp;ppt&nbsp;=&nbsp;app.Presentations.Open(filename,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MsoTriState.msoFalse,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MsoTriState.msoFalse,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MsoTriState.msoFalse);<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;スライド枚数を取得<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;slides&nbsp;=&nbsp;ppt.Slides.Count;<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;保存先作成<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;outputPath&nbsp;=&nbsp;Directory.GetCurrentDirectory()&nbsp;+&nbsp;@"output";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Directory.CreateDirectory(outputPath);<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;画像として出力<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;<=&nbsp;slides;&nbsp;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;outputName&nbsp;=&nbsp;outputPath&nbsp;+&nbsp;"p"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+i.ToString().PadLeft(5,'0')&nbsp;+&nbsp;"."&nbsp;+&nbsp;filetype;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ppt.Slides[i].Export(outputName,&nbsp;filetype,&nbsp;width,&nbsp;height);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;後処理<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ppt.Close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;}<br /><br />PowerPoint 2003 での動作を確認していますが、他のバージョンでの動作は未確認です。<br /><br />サンプルのダウンロード (Visual C# 2008 Express, サンプルの実行には .NET Framework 2.0, 3.0, 3.5 のいずれかが必要です)<br />[:ボックス１:]　<a href="http://tmp.junkbox.info/files/ppt2imgv1.0.zip">(2008/06/30) ppt2img v1.0</a>]]></content:encoded><dc:subject>技術メモ::ソフトウェア</dc:subject><dc:date>2008-06-30T00:11:42+09:00</dc:date><dc:creator>ささお</dc:creator><dc:publisher>BlognPlus</dc:publisher><dc:rights>ささお</dc:rights></item>
		<item rdf:about="http://tmp.junkbox.info/e46.html"><link>http://tmp.junkbox.info/e46.html</link><title>グラフで見る動画投稿の傾向 - アイドルマスター編</title><description>昨日の「VOCALOID編」 に引き続き、ニコニコ動画に投稿された動画の数を、タグ別・日別で集計してみました。今回も人気ジャンルの「アイドルマスター」関連です。データの見方ですが、・縦軸: 1日あたりの投稿数(1ピクセル=1投稿)・横軸: 2007/6/9を0とする経過日数(1ピクセル=1日)</description><content:encoded><![CDATA[昨日の「<a href="http://tmp.junkbox.info/e45.html">VOCALOID編</a>」 に引き続き、ニコニコ動画に投稿された動画の数を、タグ別・日別で集計してみました。今回も人気ジャンルの「アイドルマスター」関連です。<br /><br />データの見方ですが、<br /><br />・縦軸: 1日あたりの投稿数(1ピクセル=1投稿)<br />・横軸: <a href="http://www.nicovideo.jp/watch/sm9">2007/6/9</a>を0とする経過日数(1ピクセル=1日)<br /><br />水色の縞々の背景は、日曜日始まりの1週間分をあらわしています。また、各グラフの下部の数字は月をあらわしています。データの収集は、30秒に1リクエスト程度のゆっくりしたペースで行ったので、1日程度のずれがあります。]]></content:encoded><dc:subject>ニコニコ動画</dc:subject><dc:date>2008-06-09T22:55:33+09:00</dc:date><dc:creator>ささお</dc:creator><dc:publisher>BlognPlus</dc:publisher><dc:rights>ささお</dc:rights></item>
		<item rdf:about="http://tmp.junkbox.info/e45.html"><link>http://tmp.junkbox.info/e45.html</link><title>グラフで見る動画投稿の傾向 - VOCALOID編</title><description>ニコニコ動画に投稿された動画の数を、タグ別・日別で集計してみました。投稿の傾向は、必ずしも、動画ランキングの傾向とは一致していないようです。また、世間では、VOCALOIDに関するさまざまな話題がありましたが、その影響が投稿数にはあまり反映されていないように見えます。データの見方ですが、・縦軸: 1日あたりの投稿数(1ピクセル=1投稿)&lt;</description><content:encoded><![CDATA[ニコニコ動画に投稿された動画の数を、タグ別・日別で集計してみました。投稿の傾向は、必ずしも、動画ランキングの傾向とは一致していないようです。また、世間では、VOCALOIDに関するさまざまな話題がありましたが、その影響が投稿数にはあまり反映されていないように見えます。<br /><br />データの見方ですが、<br /><br />・縦軸: 1日あたりの投稿数(1ピクセル=1投稿)<br />・横軸: <a href="http://www.nicovideo.jp/watch/sm9">2007/6/9</a>を0とする経過日数(1ピクセル=1日)<br /><br />水色の縞々の背景は、日曜日始まりの1週間分をあらわしています。また、各グラフの下部の数字は月をあらわしています。データの収集は、30秒に1リクエスト程度のゆっくりしたペースで行ったので、1日程度のずれがあります。]]></content:encoded><dc:subject>ニコニコ動画</dc:subject><dc:date>2008-06-08T22:43:50+09:00</dc:date><dc:creator>ささお</dc:creator><dc:publisher>BlognPlus</dc:publisher><dc:rights>ささお</dc:rights></item>
		<item rdf:about="http://tmp.junkbox.info/e44.html"><link>http://tmp.junkbox.info/e44.html</link><title>秋月　ＧＰＳレシーバモジュールキット　組み立てのポイント</title><description>秋月の ＧＰＳモジュール：ＧＰＳ－５２Ｄ（Ｂ）－０１４　キットを組み立てる際のポイントです。- 回路面- 各部品のピン配置付属の回路図では、極性のある電解コンデン</description><content:encoded><![CDATA[秋月の <a href="http://akizukidenshi.com/catalog/items2.php?q=%22K-02294%22&s=score&p=1&r=1&page=">ＧＰＳモジュール：ＧＰＳ－５２Ｄ（Ｂ）－０１４　キット</a>を組み立てる際のポイントです。<br /><br />- 回路面<br /><a href="files/gps04.jpg" target="_blank"><img src="http://tmp.junkbox.info/files/gps04.jpg" width="320" height="240" alt="" /></a><br /><br />- 各部品のピン配置<br />付属の回路図では、極性のある電解コンデンサが記述されていますが、キットに付属しているコンデンサ(2種類)はいずれも極性がありませんので、向きはどちらでもかまいません。<br /><a href="files/gps01.jpg" target="_blank"><img src="http://tmp.junkbox.info/files/gps01.jpg" width="320" height="240" alt="" /></a><br /><br />- アンテナ面<br />アルミホイルが電池の足にあたってショートしないよう注意します。<br /><a href="files/gps03.jpg" target="_blank"><img src="http://tmp.junkbox.info/files/gps03.jpg" width="320" height="240" alt="" /></a><br /><br />- GPSモジュールへの配線<br />コネクタのピンはかなり折れやすいので注意してください。もし折ってしまった場合には、下記のようにコネクタを利用せず、直接配線することで、半田付けが比較的楽に行えます。<br /><a href="files/gps02.jpg" target="_blank"><img src="http://tmp.junkbox.info/files/gps02.jpg" width="320" height="240" alt="" /></a><br /><br />- GPSモジュールのピン配置<br />下記のようになっています。配線の必要が無いピン(6～8番ピン)には配線してはいけません。<br /><a href="files/gps05.jpg" target="_blank"><img src="http://tmp.junkbox.info/files/gps05.jpg" width="320" height="240" alt="" /></a><br /><br />- COMポートの確認<br />コントロールパネル/システム/ハードウェア タブ でデバイス マネージャー を選択して、ポート (COM と LPT)を確認します。<br /><a href="files/gps08.png" target="_blank"><img src="http://tmp.junkbox.info/files/gps08.png" width="320" height="225" alt="" /></a><br /><br />- 付属アプリケーションの画面<br />COMポートを正しく設定し、Baudrate を 9600 に、Raw Data を選択、Color のチェックボックスを有効にして、GPSモジュールに電源を入れると下記のような画面となります。<br /><br /><a href="files/gps06.png" target="_blank"><img src="http://tmp.junkbox.info/files/gps06.png" width="320" height="151" alt="" /></a><br /><br />- 受信状態が良い場合<br />見晴らしの良い場所で２～３分ほど待つとこの色になります。緯度経度、高度などすべての情報が取得できている状態です。<br /><br /><a href="files/gps07.png" target="_blank"><img src="http://tmp.junkbox.info/files/gps07.png" width="320" height="152" alt="" /></a>]]></content:encoded><dc:subject>技術メモ::ハードウェア</dc:subject><dc:date>2008-03-30T02:27:55+09:00</dc:date><dc:creator>ささお</dc:creator><dc:publisher>BlognPlus</dc:publisher><dc:rights>ささお</dc:rights></item>
		<item rdf:about="http://tmp.junkbox.info/e43.html"><link>http://tmp.junkbox.info/e43.html</link><title>うｐ主向けツールまとめ</title><description>ニコニコ動画に作品を投稿する際に便利なツールをまとめています。このページは随時更新されます。ブックマークなどされる場合には、 http://tmp.junkbox.info/e43.html を指定してください。 公開ブログパーツがある場合には勝手にお借りしています。いまはひとまずポインタだけですが、そのうちツールの使い方の動画</description><content:encoded><![CDATA[ニコニコ動画に作品を投稿する際に便利なツールをまとめています。このページは随時更新されます。<br />ブックマークなどされる場合には、 <a href="http://tmp.junkbox.info/e43.html">http://tmp.junkbox.info/e43.html</a> を指定してください。 <br /><br />公開ブログパーツがある場合には勝手にお借りしています。<br />いまはひとまずポインタだけですが、そのうちツールの使い方の動画もアップしたいなー。]]></content:encoded><dc:subject>ニコニコ動画</dc:subject><dc:date>2008-03-23T00:46:10+09:00</dc:date><dc:creator>ささお</dc:creator><dc:publisher>BlognPlus</dc:publisher><dc:rights>ささお</dc:rights></item>
		<item rdf:about="http://tmp.junkbox.info/e42.html"><link>http://tmp.junkbox.info/e42.html</link><title>dsPIC30F3012 で PCMデータ再生</title><description>比較的メモリサイズの大きい PIC である dsPIC30F3012 を使うと、18 pin DIP の1チップで２秒程度PCMデータが鳴らせます。２秒あると意外といろいろできますよ！実装例 (動画)回路図&lt;img src=&quot;files/mikupu</description><content:encoded><![CDATA[比較的メモリサイズの大きい PIC である dsPIC30F3012 を使うと、18 pin DIP の1チップで２秒程度PCMデータが鳴らせます。<br />２秒あると意外といろいろできますよ！<br /><br />実装例 (動画)<br /><a href="http://peevee.tv/v?2tdu79" target="_blank"><img src="http://tmp.junkbox.info/files/picpuchipuchi.jpg" width="291" height="240" alt="" /></img></a><br /><br />回路図<br /><a href="files/mikupuchi.png" target="_blank"><img src="files/mikupuchi.png" width="320" height="200" alt="回路図"></a><br /><br />詳細は、ソースコードを見たほうが手っ取り早いと思いますので貼り付けます。フリーのC30コンパイラを利用しています。<br />ソースコード他一式は<a href="files/picPuchi1.0.zip">こちら</a>からダウンロードしてください。<br /><br />//-------------------------------------------------------<br />//&nbsp;dsPIC30F3012&nbsp;で&nbsp;PCM&nbsp;データ再生&nbsp;(2008/2/25,&nbsp;ksasao)<br />//-------------------------------------------------------<br />//&nbsp;-&nbsp;8kHz,&nbsp;8bit&nbsp;の&nbsp;PCMデータを再生します。外付けメモリ<br />//&nbsp;&nbsp;&nbsp;無しで合計約２秒間鳴らせます。<br />//&nbsp;-&nbsp;PCMの再生には&nbsp;RD0&nbsp;の&nbsp;PWM&nbsp;出力を利用します。<br />//&nbsp;-&nbsp;dsPICの内蔵クロックを&nbsp;PLLx8&nbsp;で利用すると3Vで駆動<br />//&nbsp;&nbsp;&nbsp;できます(PLLx16にしたい場合は5Vが必要です)。<br />//&nbsp;本ソースコードは煮たり焼いたりお好きなように。<br />//-------------------------------------------------------<br />#include&nbsp;<p30f3012.h><br />#include&nbsp;<outcompare.h><br />#include&nbsp;<timer.h><br />&nbsp;&nbsp;<br />//&nbsp;設定値は、<br />//&nbsp;%ProgramFiles%MicrochipMPLAB&nbsp;C30supporthp30f3012.h&nbsp;や<br />//&nbsp;dsPIC30F3012の&nbsp;PDF&nbsp;を参照してください。<br /><br />_FWDT(WDT_OFF);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;ウォッチドッグタイマ無効<br />_FGS(CODE_PROT_OFF);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;コードプロテクト無効<br />_FOSC(CSW_FSCM_OFF&nbsp;&&nbsp;FRC_PLL8);&nbsp;//&nbsp;FRC(7.37MHz)xPLL8/4=7.37MIPS&nbsp;*&nbsp;2<br />_FBORPOR(PBOR_OFF&nbsp;&nbsp;&&nbsp;PWRT_64&nbsp;&&nbsp;MCLR_EN);<br /><br />//&nbsp;遅延のための関数です<br />void&nbsp;delay(int&nbsp;count){<br />&nbsp;&nbsp;&nbsp;&nbsp;while(count--);<br />}<br /><br />//&nbsp;再生処理の宣言です。<br />void&nbsp;playP(int&nbsp;start,int&nbsp;end);<br /><br />//&nbsp;8kHz,&nbsp;8bitの&nbsp;PCMデータを適当に作成してください(128が中央値です)<br />const&nbsp;unsigned&nbsp;char&nbsp;WAV_DATA[]&nbsp;=&nbsp;{<br />129,130,128,126,128,128,131,128,125,128,128,129,128,128,128,128,<br />&nbsp; // 略<br />127,126,125,126,128,129,130,131,130,129,128,128,128,128,127,126<br />};<br /><br />//&nbsp;ピン割り当て&nbsp;(dsPIC30F3012)<br />//--------------------------------------------------------------<br />//&nbsp;1(I)&nbsp;/MCLR&nbsp;(10kでプルアップ)&nbsp;&nbsp;&nbsp;18(I)&nbsp;AVdd&nbsp;(+3V)<br />//&nbsp;2(I)&nbsp;スイッチ0(RB0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;17(I)&nbsp;AVss&nbsp;(GND)<br />//&nbsp;3(I)&nbsp;スイッチ1(RB1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;16(N.C.)<br />//&nbsp;4(I)&nbsp;スイッチ2(RB2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;15(N.C.)<br />//&nbsp;5(I)&nbsp;スイッチ3(RB3)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;14(I)&nbsp;Vdd&nbsp;(+3V)<br />//&nbsp;6(N.C.)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;13(I)&nbsp;Vss&nbsp;(GND)<br />//&nbsp;7(N.C.)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12(N.C)<br />//&nbsp;8(I)&nbsp;スイッチ4(RC13)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;11(N.C)<br />//&nbsp;9(I)&nbsp;スイッチ5(RC14)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10(O)&nbsp;PWM出力(RD0)<br />//--------------------------------------------------------------<br />// dsPIC30F3021 の 2 - 5, 8, 9 番ピンは 10kΩでプルアップしておき、<br />// スイッチが押されたら Lになるよう1kΩの抵抗を各スイッチのGND側に<br />// 配置します。<br />int&nbsp;main(void){<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;各ポートの出力値設定<br />&nbsp;&nbsp;&nbsp;&nbsp;PORTB&nbsp;=&nbsp;0xFFFF;<br />&nbsp;&nbsp;&nbsp;&nbsp;PORTC&nbsp;=&nbsp;0xFFFF;<br />&nbsp;&nbsp;&nbsp;&nbsp;PORTD&nbsp;=&nbsp;0xFFFE;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;入出力設定&nbsp;(O:&nbsp;出力,&nbsp;I:&nbsp;入力,&nbsp;-:無効)<br />&nbsp;&nbsp;&nbsp;&nbsp;TRISB&nbsp;=&nbsp;0x000F;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;----&nbsp;----&nbsp;OOOO&nbsp;IIII<br />&nbsp;&nbsp;&nbsp;&nbsp;TRISC&nbsp;=&nbsp;0x6000;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;OII-&nbsp;----&nbsp;----&nbsp;----<br />&nbsp;&nbsp;&nbsp;&nbsp;TRISD&nbsp;=&nbsp;0x0000;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;----&nbsp;----&nbsp;----&nbsp;---O<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;ADコンバータ設定(0:ADコンバータを利用&nbsp;1:ディジタルI/Oを利用)<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;デフォルトでは、ADコンバータが有効なため、PORTB&nbsp;をディジタル<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;I/Oとして利用したい場合は、下記設定は必須です＞＜<br />&nbsp;&nbsp;&nbsp;&nbsp;ADPCFG&nbsp;=&nbsp;0xFFFF;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;今回は適当です。各ボタンが押されたら単純に<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;指定した範囲を再生します。<br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(1)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!PORTCbits.RC13){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;playP(0,116*16-1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!PORTCbits.RC14){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;playP(116*16,218*16-1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;b&nbsp;=&nbsp;PORTB;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!(b&nbsp;&&nbsp;0x1)){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;playP(218*16,437*16-1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!(b&nbsp;&&nbsp;0x2)){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;playP(437*16,570*16-1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!(b&nbsp;&&nbsp;0x4)){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;playP(570*16,722*16-1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!(b&nbsp;&&nbsp;0x8)){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;playP(722*16,972*16-1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />//&nbsp;PCMデータを&nbsp;start&nbsp;から&nbsp;end&nbsp;まで再生します。<br />void&nbsp;playP(int&nbsp;start,int&nbsp;end){<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;p&nbsp;=&nbsp;start;<br />&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;int&nbsp;MAX&nbsp;=&nbsp;256;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;TRISD&nbsp;=&nbsp;0x0000;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;----&nbsp;----&nbsp;----&nbsp;---O<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;PWM関連の設定です。リンクするライブラリが結構大きいので、<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;インラインアセンブラで書いたほうが良いと思います。<br />&nbsp;&nbsp;&nbsp;&nbsp;SetDCOC1PWM(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OpenOC1(OC_IDLE_CON&nbsp;&&nbsp;OC_TIMER2_SRC&nbsp;&&nbsp;OC_PWM_FAULT_PIN_DISABLE,&nbsp;0,&nbsp;0);<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;7.37MHz&nbsp;*&nbsp;8逓倍(PLL)&nbsp;/&nbsp;4命令&nbsp;/&nbsp;MAX段階&nbsp;=&nbsp;57.6kHz(@MAX=256)<br />&nbsp;&nbsp;&nbsp;&nbsp;OpenTimer2(T2_ON&nbsp;&&nbsp;T2_GATE_OFF&nbsp;&&nbsp;T2_PS_1_1&nbsp;&&nbsp;T2_SOURCE_INT,&nbsp;MAX&nbsp;-&nbsp;1);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;int&nbsp;WAIT&nbsp;=&nbsp;360;&nbsp;//&nbsp;決めうち&nbsp;:-)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;スピーカーが「カチっ！」というのを抑える<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;startup&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(startup&nbsp;<&nbsp;128){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetDCOC1PWM(startup++);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(WAIT);<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;ここからがメインの再生<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;c0;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(p<end)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c0&nbsp;=&nbsp;WAV_DATA[p];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetDCOC1PWM(c0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(WAIT);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;スピーカーが「カチっ！」というのを抑える<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;count&nbsp;=&nbsp;127;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(count&nbsp;>&nbsp;0){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetDCOC1PWM(count--);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay(WAIT);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;ここではスピーカーが停止状態<br />}]]></content:encoded><dc:subject>技術メモ::ハードウェア</dc:subject><dc:date>2008-02-25T01:43:15+09:00</dc:date><dc:creator>ささお</dc:creator><dc:publisher>BlognPlus</dc:publisher><dc:rights>ささお</dc:rights></item>
		<item rdf:about="http://tmp.junkbox.info/e41.html"><link>http://tmp.junkbox.info/e41.html</link><title>ILMergeWin</title><description>■ これは何ですか？.NET Framework で作成された複数のDLLを1つの.exeにまとめたりするツールです。ILMergeという Microsoft が配布しているコマンドラインツールを GUI で wrap したものです。ILMergeに関する詳細は、＠IT: アプリケーションのEXEファイ</description><content:encoded><![CDATA[<img src="http://tmp.junkbox.info/files/ilmergewin.png" alt="" /><br /><br />■ これは何ですか？<br />.NET Framework で作成された複数のDLLを1つの.exeにまとめたりするツールです。ILMergeという Microsoft が配布しているコマンドラインツールを GUI で wrap したものです。ILMergeに関する詳細は、<br /><br /><a href="http://www.atmarkit.co.jp/fdotnet/dotnettips/426ilmerge/ilmerge.html">＠IT: アプリケーションのEXEファイルやDLLファイルを1つにまとめるには？</a><br /><br />などを参照してください。<br /><br />機能を最小限に絞っているので操作がシンプルです :-)<br />Visual Studio 2005 (C#) 向けのソースコードも付属しています。自由に改変してください。<br />なお、実行には、.NET Framework 2.0, 3.0, 3.5 のいずれかがインストールされている必要があります。<br />また、あらかじめ、ILMerge.exe を<a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=22914587-b4ad-4eae-87cf-b14ae6a939b0&displaylang=en">Microsoftのサイト</a>から取得しておいてください。<br /><br />最新版の配布は、<br /><a href="http://tmp.junkbox.info/e41.html">http://tmp.junkbox.info/e41.html</a><br />で行います。<br /><br />■ 利用方法<br /><br />1. ILMergeWin.exe を起動します。<br />2. １つにまとめたいファイルやDLLをDrag&Dropします。<br />3. F5キーを押すと結合を行います。<br /><br />■ ライセンス<br />利用には以下の項目に同意が必要です。<br /><br />- 本アーカイブのファイルの、一部または全部の利用および再配布は、  商用・非商用のいずれであっても許可は不要です。<br />- ソースコードの改変を行った場合には、改変者が著作権を保有します。<br />- 本アーカイブの一部または全部をささおが改変したり、配布する権利は放棄しません。<br />- 本アーカイブの一部または全部の利用により発生した損害について、  ささおは一切責任を負いません。<br />- 本アーカイブに対するサポートは行いません。<br /><br />■ ダウンロード<br />[:ボックス１:] <a href="files/ILMergeWin1.0.0.0.zip">ver. 1.0.0.0</a> (2008/01/27)]]></content:encoded><dc:subject>ツール</dc:subject><dc:date>2008-01-27T19:13:20+09:00</dc:date><dc:creator>ささお</dc:creator><dc:publisher>BlognPlus</dc:publisher><dc:rights>ささお</dc:rights></item></rdf:RDF>