WIAのファイルを取得するには

解決


XOOX  2003-06-30 07:08:44  No: 3954  IP: [192.*.*.*]

事実上2003年上期発売までののCanon製カメラが対象となると思うのですが
WindowsXPやWindowsMeで
WIAドライバーをインストールすると
読み出しオンリーですが
エクスプローラだとカメラのマークのストレージデバイスのようにみえます。
しかしShellAPI系での読み込み方がわからず
ドライブとしてみる方法がわかりません。
最低の方法としてはOpenDialogを使う方法もあるかもしれませんが
描画系インターフェースはAPIに依存せず完全自前描画にしたいので
直接WinAPIを叩く方法をどなたかご教授ください。
(dllからの新規インポートが必要なのかそれともパラメータだけなのかなど)

編集    削除
XOOX  2003-10-03 00:16:41  No: 3955  IP: [192.*.*.*]

自己解決できました。
あくまでWIAAPIを用いないでやる方法として
IShellFolderを用いれば名前の取得などが出来ることがわかりました。
又、データのやり取りは直接操作できないようなので
Opendialog関数などを使うとシェルが自動的にテンポラリーにコピーすることで使えるほか

IContextMenuインターフェースを使うことでシエル側のメニューを呼び出せるので
アプリの上ではポップアップメニューで「削除」「保存」ができます。
又普通にコピーする方法は失敗したのですが
IdataObjectを介するする形でD&Dが出来たので
そのままそれを利用することでコピーもできました。

編集    削除
Halbow  2003-10-07 05:47:49  No: 3956  IP: [192.*.*.*]

Halbow です、こんばんは。

> 自己解決できました。

それはおめでとうございます。

元質問の

> 描画系インターフェースはAPIに依存せず完全自前描画にしたいので
> 直接WinAPIを叩く方法をどなたかご教授ください。

この部分はどのように解決されたのでしょうか。わたしは API に依存しない
描画というのが全く分かりません。「完全自前描画」というのはどのように
して行うのでしょうか。線を一本引くだけのコードだけでも教えてください。

よろしくお願いいたします。

編集    削除
XOOX  2003-10-17 06:23:09  No: 3957  IP: [192.*.*.*]

>わたしは API に依存しない描画というのが全く分かりません。
どうしてわからないのか全く理解できません。
描画はWindows以前からある話で基本中の基本でリソースも豊富です。
シェル関連やWIAの比ではないです。
本気でそういっているのなら何か視点に問題があると思います。


>この部分はどのように解決されたのでしょうか。
ということですがこの部分はなんら疑問部分ではなく
解決も何もとっくの昔に実装済みです。

例えばdelphiだったら最低でもTbitmapのScanlineがあるはず
例えば垂直線だったら32bitcolorの場合
for i:= y1 to y2 do
begin
 P:=bm.scanline[i]+4*x;//P:ポインタ 1色につき4byte
 Cardinal(P)^:=fColor;//fcolor:Cardinal 色です。
end;
でピッとかけるはずです。
(実際はScanLineは一度だけでメモリ加算(減算)計算を使います)
TBitMapはDibなのでBitBltでコピーすれば表示画面への転送もできます。

OpenGLだったら
GetDC(Form1.handle)などとしてDC確保して初期化した後
GlBegin(GL_LINES)
  glVertex2f( 0.0,  0.0);
  glVertex2f( 0.2,  0.7);
Glend;
但しドット単位の描画ではなく画面に対する比率での表示になります。

OpenGLはマウスでクリックした座標から描画オブジェクトの場所か返す関数があり
GUIにも有効です。

ベタ系の場合
国産ではアルファビットマップとというライブラリーが多分参考になると思います。(コアのソース公開していれば)
海外ではGraphic32と今は無きFastLibというのが参考になります。

OpenGLはWin32系でWindowsのGUIサンプルもある昨年6月に亡くなった
Jahn Horn氏のSullacoをはじめとしてdelphiのサンプルは結構多いようです。
中村氏のDHGLは描画系は実装していないようです。(不確か)

#書き込み内容からしてほんとにHalbowさんか非常に疑問

編集    削除
Halbow  2003-10-17 07:01:54  No: 3958  IP: [192.*.*.*]

Halbow です。

TBitmap は、メモリDC をカプセル化したものです。
Delphi の TBitmap の Canvas や Scanline は DIB または DDB への
内部アクセスにすぎません。実際に描画するのに BitBlt を
使ったり、デバイスコンテキストを取得するのに GetDC() を
使うのが、どうして API に依存しない「完全自前描画」なのか
理解できません。API に依存しないのなら、すくなくても
GDI 関数を一切つかわないか、そのラッパーを使わないはず
です。とにかく、ラッパーの関数を使う描画は「完全自前描画」ではな
いですね。

編集    削除
Halbow  2003-10-17 07:28:44  No: 3959  IP: [192.*.*.*]

Halbow です。

> #書き込み内容からしてほんとにHalbowさんか非常に疑問

いや、ほんものの Halbow です。(笑)

すこし、誤解があったようです。
VCL の TBitmap も TCanvas も API のいわゆる Graphic Device Interface
(GDI) の API のラッパーです。GDI 以外で MS の SDK に載っているのは、
XP や .NET でサポートされている GDI+ と OpenGL ですね。あと、直接、
スクリーンのフレームバッファにアクセスするライブラリがあるかも知れません。

わたしが知りたかったことは、すくなくても既存のライブラリに依存しないで
自前でどうやってフレームバッファのような下位レベルにアクセスして描画
するのか、ということです。ですから、既存のライブラリを紹介していただい
ても、そうですか、としか言いようがありません。すみませんでした。

ご回答、ありがとうございました。

編集    削除