Create a new world

きっと誰もが新しい世界を作り続けているんだよ。

.NETでスキャナを扱うためのTWAINライブラリ

結論から言うと、TwainDotNetを使うのが一番幸せになれそうだなということなんですけどね。
twaindotnet - A TWAIN library for the .net platform. - Google Project Hosting

ネット上の日本語情報にあたってみたけれど・・・

今月に入ってから、仕事で.NETからスキャナを扱うことをしていました。
たぶんライブラリあるだろうなぁと調べてみたのですが、なかなか情報が少なく・・・。
有料のコンポーネントもいろいろあるようですが、オープンソースのライブラリで日本語情報としてあったのがこの2つ。助かりました。

C#でTWAINを操作してみる - ニヤリ TechSide
.netでTWAINスキャナから画像の取込(実践編) | .log

ということで、この2つの情報をもとに.NET TWAIN image scannerを使ってみたのです。
.NET TWAIN image scanner - CodeProject

このソースはだいぶ古く、.NET 1.1のころのもののようです。
ですが、.NET 4.0に普通にコンバートしてくれたのでしばらく使っていました。
それで分かったのですが、このライブラリ・・・というかラッパーは、結構使いづらいなということでした。
まずい点としては、

  • リソースの解放を自力でやらなければいけない。
  • メッセージポンプの実装が必要になるので、それなりの量のグルーコードを書かなければいけない。

の2つです。
特にリソースの解放に関しては、ポインタのない世界で生きてきた自分には苦しくて。。。

リソース解放の方法を調べていたら見つけたデキル奴

そんなわけで、うまいことリソース解放できる仕組みを作ろうと思ってグーグル先生にいろいろ聞いてみました。そこで見つけたのが、上記で紹介したTwainDotNetでした。
このライブラリは.NET TWAIN image scannerに対して、制御用のメソッドを数多く加えています。リソース制御もきっちりやってくれています。
そのおかげで、AccessViolationExceptionが発生しないようになりました。

また、TWAIN DriverのUI表示や画像の回転を指定する際にTWAINのソースをいじくる必要もありませんでした。

実際のところ、このライブラリ一つで十分実用に耐えうると感じています。
細かい使い方に関しては、TwainDotNetのサンプルプロジェクトを参照してください。
/ - twaindotnet - A TWAIN library for the .net platform. - Google Project Hosting