上へ

開発メモ

2003/01/26 FFT

2次元 FFT ルーチンを探索、大浦氏のページと FFTW に行き着く。ライセンス的に大浦ルーチンを選択、Delphi から利用できるようにする。サンプルプログラムを作って、DCT(Discrete Cosine Transform) と逆DCT を確認、やっぱり驚異的に速い、・・・ところで2次元DCT 結果の解釈ってどうすればいいんだっけ?(←バカ)
ソースコード中に必要十分なハズの解説と、大浦氏のページに詳細な解説があるけど、う〜ん?う〜ん?(プスプスプスプス・・・)
とりあえず DCT 結果の実験解析プログラム作ろ。

2003/01/20 TWAIN

TWAIN の調査中、日本語で詳しいのはBB研究所。データソースマネージャのオープンでエラーが出ないのに、データソースの選択が空白になる場合は構造体のアライメント指定(2byte)が必要。
DIB から DDB への変換が結構難しい、BitmapInfoHeader(BitmapCoreHeader) までは取得できるので、BitmapFileHeader を追加して、TBitmap の LoadFromStream で変換する方法は失敗。
結局 TBitmap の Canvas に SetDIBitsToDevice で書くことで対応。
256色以下(要パレット)の場合はTWAIN サンプルのように、パレットを作って CreateCompatibleDC ・・・が必要かもしれないが、保留する。
function IsBitmapInfoHeader(PDIB: Pointer): Boolean;
// True:  BitmapInfoHeader
// False: BitmapCoreHeader
begin
  Result := PBitmapInfoHeader(PDIB).biSize <> SizeOf(BITMAPCOREHEADER);
end;

function GetDIBWidth(PDIB: Pointer): Integer;
begin
  if (IsBitmapInfoHeader(PDIB)) then
    Result := PBitmapInfoHeader(PDIB).biWidth
  else
    Result := PBitmapCoreHeader(PDIB).bcWidth;
end;

...
Bitmap.Width := GetDIBWidth(PDIB);
Bitmap.Height := GetDIBHeight(PDIB);
Bitmap.PixelFormat := pf24bit;

PBI := PBitmapInfo(PDIB);
SetDIBitsToDevice(Bitmap.Canvas.Handle, 0, 0, Bitmap.Width, Bitmap.Height,
0, 0, 0, Bitmap.Height, Bits, PBI^, DIB_RGB_COLORS); ...
TWAIN ドライバが出すダイアログを動作させるのにメッセージループが必要なようだ。ローカルなメッセージループにしたいけど・・・う〜ん。

2003/01/14 linux設備で使っているボード

linux で設備を作るときに、「linux で使いたいので動作確認させて下さい」といってメーカーからボードを借りまくったので、評価が定まってたら書こうと思っていたのですが、忘れていました。
わけのわからん奴に、快く貸してくれたメーカーの皆さんありがとうございました。

- 型番 メーカー 概要
4軸制御ボード MC8041P 株式会社ノヴァ電子 I/Oポートアクセスドライバ経由で制御
32/32点デジタルI/O PCI-2726CM 株式会社インタフェース I/Oポートアクセスドライバ経由で制御
プログレッシブ対応画像取込 PicPort Mono 株式会社リンクス 別売りSDKから制御(取込のみ)

MC8041P
選定当時(2001/4月頃)、手ごろな値段でダントツの性能を誇っていました。現在の最新機種と比べるとダントツとまではいかなくなりましたが、依然として非常に高いコストパフォーマンスを保っています。軸制御関係は必要なファンクションが過不足無く揃っているかどうかの当たり外れが激しいのですが、軸制御チップメーカーらしい手堅いつくりで良かったです。

PCI-2726CM
定番のインタフェースで選定しました、ラインナップが揃っていて、必要な情報がすべて開示されていて、貸し出し、修理(実はケーブル図面ミスで1つ壊した、こちらの責任なので有償修理(^^;)、該非判定、どの対応も高度に整備されていて迅速かつ親切です。

PicPort Mono
linux で使える画像ボードがこれくらいしか見つからなかったのと、スイスのLeutron Vision社製で海外では採用実績が多いようなので、選定しました。作者周辺で採用事例の多い matrox 社製meteor II + MIL と比べると、ライブ画面に他のウィンドウがオーバーラップが出来ないという制約があるものの、パソコンの相性問題や、ランタイムライセンス料に悩まされずに済み、フレームの乱れが無く(meteor II は上下で分離することがある)、CompactPCI も含めてラインナップが揃っていて、良かったです。
当初ドライバからのカーネル関数呼び出しが違っていてパッチを当ててつかっていたのですが(代理店には報告、インストーラが対応してなかっただけかも)、その後の無償バージョンアップで対応されていました。

2003/01/09 ためメモ

昨年9、10月の空白分に蛇口への行き方戻り方を書いておく

2003/01/05 年末の仕事

仕事で使わなければならない(もしかしたら有名かも知れない)ライブラリがあるのですが、それがレジストリを使っていたり、いまいち気に入るものではないので相当ライブラリの開発に着手してみました。
(だいたい実装能力を超えて非同期とかCOMとか手を出し過ぎてるからこんなことにぶつぶつ・・・)
  • アプリ層を InputForms で抽象化
  • セッション層から下を抽象化、実装はdll にして動的ロード
  • プレゼンテーション層は InputForms と抽象化されたセッション層のみに依存した状態で作れば良い
・・・で上位互換にできる。アプリ層のデータで、個別アプリに組み込むわけに行かないデータは・・・

といろいろ考えた結果、結局現状と同じセッション層までのものを作ってしまいました。←だめじゃん。