<?xml version="1.0" encoding="UTF-8" ?><rdf:RDF 
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="ja">
  <channel rdf:about="http://w.atwiki.jp/kojin/">
    <title>個人のウィキ</title>
    <link>http://w.atwiki.jp/kojin/</link>
    <atom:link href="https://w.atwiki.jp/kojin/rss10.xml" rel="self" type="application/rss+xml" />
    <atom:link rel="hub" href="https://pubsubhubbub.appspot.com" />
    <description>個人のウィキ</description>

    <dc:language>ja</dc:language>
    <dc:date>2009-07-25T22:26:57+09:00</dc:date>
    <utime>1248528417</utime>

    <items>
      <rdf:Seq>
                <rdf:li rdf:resource="https://w.atwiki.jp/kojin/pages/36.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kojin/pages/35.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kojin/pages/34.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kojin/pages/33.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kojin/pages/32.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kojin/pages/31.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kojin/pages/30.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kojin/pages/29.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kojin/pages/28.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kojin/pages/27.html" />
              </rdf:Seq>
    </items>
	
		
    
  </channel>
    <item rdf:about="https://w.atwiki.jp/kojin/pages/36.html">
    <title>例外への対処</title>
    <link>https://w.atwiki.jp/kojin/pages/36.html</link>
    <description>
      *例外への対処

　ここでの例外は、設計するアプリケーションが取り扱う領域では制御しきれない要因によって発生するもののみを扱う。代表的なものとして、ファイル入出力関連の例外が上げられる。実存するファイルを開くにはファイルが実存している必要がある。しかし、ある時点でファイルの実存を確認できたとしても、実際にファイルを開く時点では実存を完全に保証することはできない。途中で他のアプリケーションがファイルを削除したり移動したりする可能性があるためである。したがってこれは本稿で扱うべき例外である。

　このような例外が発生した時、アプリケーションはどう対処すべきかを考察する。
単純な対処として考えられるのが、例外が発生するまでに行った処理を白紙に戻し、例外の発生をユーザーに通知することである。この考えは自然で、設計者にとってもユーザーにとっても受け入れやすい。したがって、例外の処理はこれを基本にすべきである。

　では、「例外が発生するまでに行った処理」とは、どこまでの範囲を指しているのか。この問いに関しても、自然な指標を与えることができる。その範囲とは、ユーザーの意思決定による分岐から例外発生までである。ここで、ユーザーの意思決定は、時系列で見て例外の発生に最も近い意思決定を選択するのが妥当だろうが、状況に応じてさらに遡った意思決定を選択しても良い。

　例として、ファイルを読み込みドキュメントを表示する機能を考える。ダイアログ上のボタンを押し、ファイル選択ダイアログを表示してファイルを選ばせてそれを読み込み、ドキュメントと解釈してそれを表示する。ここで発生する例外は２つである。１つ目はファイルが読み込めない例外、２つ目はファイルをドキュメントとして解釈できない例外である。これらの例外に対し、「例外が発生するまでに行った処理を白紙に戻し、例外の発生をユーザーに通知する」という戦略を適用する。その結果、ダイアログ上のボタンを押してからの処理、もしくはファイル選択ダイアログでファイルを選択してからの処理を白紙に戻し、 ファイルが読み込めなかった旨、もしくは読み込んだファイルはドキュメントではないという事をメッセージボックスで表示する、という処理をプログラムすることになるだろう。    </description>
    <dc:date>2009-07-25T22:26:57+09:00</dc:date>
    <utime>1248528417</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kojin/pages/35.html">
    <title>プログラミング戦略</title>
    <link>https://w.atwiki.jp/kojin/pages/35.html</link>
    <description>
      -[[例外への対処]]    </description>
    <dc:date>2009-07-25T21:26:30+09:00</dc:date>
    <utime>1248524790</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kojin/pages/34.html">
    <title>直接は結合できないフィルターを結合する便利な方法 - Intelligent Connect</title>
    <link>https://w.atwiki.jp/kojin/pages/34.html</link>
    <description>
      Video Capture Source フィルタの色空間/圧縮形式と Video Renderer フィルタで受け付けるそれとが合致しない場合、二つは直接結合できない。
二つのフィルタを結合するために Decompressor や Color Space Converter を介さなければいけないが、ふさわしいものを選択するのは面倒だ。

これを解決する手段に、一般的な場合の方法と特殊な場合の方法がある。

一般的な方法は、 IGraphBuilder を利用すること。 IGraphBuilder の関数

  HRESULT Connect(
    IPin *ppinOut,
    IPin *ppinIn
  );

は、 Inteligent Connect のメカニズムにより、二つのピンをうまいこと結合してくれる。グラフに存在している未結合のフィルターで利用できるものがあればそれを利用する。また、それで足りないようならば、レジストリから利用できるフィルタを検索し、グラフに追加して結合してくれる。

一方、特殊な場合として、 ICaptureGraphBuilder2 の

  HRESULT RenderStream(
    const GUID *pCategory,
    const GUID *pType,
    IUnknown *pSource,
    IBaseFilter *pIntermediate,
    IBaseFilter *pSink
  );

がある。これは任意のソースフィルタもしくは Output Pin と VideoRenderer のような Sink Filter を Inteligent Connect のメカニズムで結合してくれる関数だ。 pIntermediate には、 Decompressor など、間に挟みたい Filter を指定できる。    </description>
    <dc:date>2009-07-11T16:01:33+09:00</dc:date>
    <utime>1247295693</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kojin/pages/33.html">
    <title>キャプチャーデバイスの解像度やフォーカスなどを操作する</title>
    <link>https://w.atwiki.jp/kojin/pages/33.html</link>
    <description>
      USBカメラなどのデバイスの解像度やフォーカスなどを設定する方法を記す。

前提として、デバイスを表すフィルタを取得できているものとする。取得したフィルタを pFilter とする。

デバイスのプロパティーの設定を行う簡単な方法は、関数 OleCreatePropertyFrame() を呼び出す事だろう。[[DirectShow]] のヘルプを調べれば判るが、デバイスのドライバーを表す WDM Video Capture Filter は、ISpecifyPropertyPages をフィルタとピンのインターフェースとして提供している。フィルタの ISpecifyPropertyPages を利用することによりフォーカスの調整や自動フォーカスなどの設定を行うことができる。また、ピンの ISpecifyPropertyPages を利用することにより解像度やフレームレートなどの設定を行うことができる。

実際の OleCreatePropertyFrame() の呼び出し方については [[http://vision.kuee.kyoto-u.ac.jp/~hiroaki/firewire/directshow.html#samplegrabbercb]] をみるとわかりやすい。    </description>
    <dc:date>2009-04-19T17:50:56+09:00</dc:date>
    <utime>1240131056</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kojin/pages/32.html">
    <title>キャプチャー用のデバイスからの映像を表示するウィンドウを操作する</title>
    <link>https://w.atwiki.jp/kojin/pages/32.html</link>
    <description>
      一般的にはグラフの終端には Video Renderer が結合されていて、グラフを動かすとキャプチャした映像が Video Renderer の作成したウィンドウに表示される。
よって、グラフから Video Renderer フィルタを取り出し、 IVideoWindow インターフェースを Video Renderer から取得すればウィンドウを操作できるはずだ。
キャプチャした映像を表示するウィンドウをグラフが動いている間に閉じた場合、グラフは動いているのにキャプチャ画像は更新されないという事態に陥るが（要確認）、ウィンドウを操作できればそれにも対応できるだろう。    </description>
    <dc:date>2009-04-08T20:58:20+09:00</dc:date>
    <utime>1239191900</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kojin/pages/31.html">
    <title>DirectShow</title>
    <link>https://w.atwiki.jp/kojin/pages/31.html</link>
    <description>
      -[[キャプチャー用のデバイスからの映像を表示するウィンドウを操作する]]
-[[キャプチャーデバイスの解像度やフォーカスなどを操作する]]
-[[直接は結合できないフィルターを結合する便利な方法 - Intelligent Connect]]    </description>
    <dc:date>2009-07-11T15:33:53+09:00</dc:date>
    <utime>1247294033</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kojin/pages/30.html">
    <title>cvFindChessboardCorners</title>
    <link>https://w.atwiki.jp/kojin/pages/30.html</link>
    <description>
      この関数は、チェスボードパターンが偶数×奇数もしくは奇数×偶数である場合、
-隅が黒のマスからスタート
-行方向に進む
-次の行に移るときの軌跡が N や Z になる
ような順番でコーナー位置を出力する。    </description>
    <dc:date>2009-03-23T20:48:20+09:00</dc:date>
    <utime>1237808900</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kojin/pages/29.html">
    <title>MITメディアラボ</title>
    <link>https://w.atwiki.jp/kojin/pages/29.html</link>
    <description>
      MIT の機関のひとつ。

研究内容は
-技術の応用、斬新な方法による統合分野の開拓
-人間とコンピューターとの協調
-発展途上国のための技術開発

量子コンピュータも研究している。また、100ドルパソコンもここで開発された。    </description>
    <dc:date>2009-03-06T21:08:53+09:00</dc:date>
    <utime>1236341333</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kojin/pages/28.html">
    <title>未分類</title>
    <link>https://w.atwiki.jp/kojin/pages/28.html</link>
    <description>
      -[[MITメディアラボ]]    </description>
    <dc:date>2009-03-06T21:04:57+09:00</dc:date>
    <utime>1236341097</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kojin/pages/27.html">
    <title>CvvImage (別名 CImage)</title>
    <link>https://w.atwiki.jp/kojin/pages/27.html</link>
    <description>
      **概要
このクラスの特筆すべき点は、 [[OpenCV]] の画像を表す構造体 IplImage を、 [[MFC]] のコンポーネントに簡単に書き込めることである。    </description>
    <dc:date>2009-03-02T01:04:57+09:00</dc:date>
    <utime>1235923497</utime>
  </item>
  </rdf:RDF>
