DLLでファイルの一部だけをOpenしたい。

解決


とうぇ  2003-06-03 03:49:12  No: 3681

はじめまして。プログラミングの知識は乏しいので、変な事言っていたらすみません。
  それではまず、順を追って状況を説明していきたいと思います。
1)画像ファイルをアナログ的にただ単につなげて、ひとつのファイルにしました。もちろん非圧縮で、バイナリレベルでくっつけただけです。

2)そして今ここに、画像ファイルのパスを渡すと何らかの処理をしてくれる便利なDLLがあります。

3)やりたいことは、繋げて一つにしてしまったファイルの中の一枚の画像をこのDLLに処理してもらいたい、ということです。
    
[画像1|画像2|画像3|画像4]  ←1つのファイル
  @例えば画像2をパスを指定するタイプのDLLで処理していただきたい。

  DLLに処理してもらうファイルはパスで指定する必要があるため、このように一つに繋げてしまったファイルの一部だけを指定することが出来ません。
  いったん画像ファイルをまとめたファイルからハードディスクに一時的に書き出して、それをDLLに読みこなせるという方法も考えられますが、なんとも頂けない方法だと思っています。

  このような事をしたい、ということは世間一般で良くあることだと思い、検索してみようと思ったのですが、どのようなキーワードで検索すればいいのかすら分からなくて、この掲示板で質問してみようと思いました。


にしの  2003-06-03 08:34:43  No: 3682

画像形式によっては可能です。
たいていの画像形式には、その画像サイズがあります。そこから計算して分割することができると思います。

画像形式がたとえばrgb形式(単純なrgbの繰り返しのファイル)だと、分割するのは不可能です。ある程度画像サイズを予測して、適当に切ることになります。

ファイルにいったん出力するのがいただけない方法というのは、言わんとすることは何となくわかりますが、それはDLLの仕様がいただけない、ということですから、DLLを修正する方がよろしいかと。
DLLがファイルを読み込むようにしている以上、OSを乗っ取ってファイル入出力管理部分を自前ルーチンに置き換えるか、ファイルにいったん落とすしかないと思います。
デバッグ効率から考えても、OSを乗っ取るより、一時ファイルを作成するのがよいかと思います。

検索のキーワードは結構難しいですよね。
まずは、何が知りたいか=何がわからないか、を明確にすべきです。
今回の場合、画像を単純にくっつけたファイルを、分割する方法がわからない、ということだと思います。
たとえば画像をBMPとして考えます。
BMPは画像ですから、キーワードに「画像」をつけるのは冗長です。絶対ではないですが、BMPのページに画像と書かれている可能性も低いと思われます(BMPとか、イメージと書くでしょうから)。
BMPの内部書式(フォーマット)が知りたいので、まずは「BMP フォーマット」で検索してみます。
googleで検索すると、一番最初に
DIB(BMP)フォーマットの構造説明書(データ/画像&サウンド)
http://www.vector.co.jp/soft/data/art/se027618.html
が出ました。
これを見るだけでも、BMP形式の情報がどのように格納されているか、わかると思います。

今回は一発で見つかりましたが、見つからない場合は、何回かキーワードの選定をする必要があります。

検索のキーワードが思いつかないのは、自分の中で情報を整理し切れていないのだと思います。
こんな感じでがんばって検索してください。


とうぇ  2003-06-03 23:59:34  No: 3683

お早い返信ありがとうございます。

そうですか。なるほど、やはり一旦ファイルに書き出さないと読みこめないようですね。
もしかしたらメモリ上のデータをファイルに見せかけるような、ちょうどファイルマッピングの反対のような仕組みがWinにあるかもしれないと思っていたのですが、ないようですね。

>画像形式がたとえばrgb形式(単純なrgbの繰り返しのファイル)だと、分割するのは不可能です。ある程度画像サイズを予測して、適当に切ることになります。
いえいえ、一応ヘッダを付けていますからその辺は大丈夫です。

取りあえず、ファイルに書き出さないと無理ということだ分かっただけで大収穫です、にしのさん。ありがとうございました。
書き出す方向で言ってみようと思います。


にしの  2003-06-04 21:02:32  No: 3684

名前付きパイプでなら、ファイルの一部をマッピングできるかもしれませんが、やはりDLL側の実装次第だと思います。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加