[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/05/20(Fri) 17:44
投稿者名:ダンボ
URL :
タイトル:
リージョンデータのセーブ&ロード
皆さんこんにちは

複雑な形のウィンドウを作るために、420x310ピクセルのBMP画像をフォームに貼り付けてから
透明色を除外しつつ下記のAPIでリージョンを作ってSetWindowRgnで実現しました。

動作はうまく行っているのですが、処理時間がかかり、APP起動指示から2〜4秒後(体感:ちょっともたつく
なぁ)
に画面が表示されます。APIの呼び出し回数を概算すると、
GetPixel    130,200回
CreateRectRgn 4,200回
CombineRgn    4.200回
DeleteObject  4,200回
SetWindowRgn  1回
程度と想定されます。これをスピードアップするために、「GetPixelを使わずにメモリ配列でやれ」という
答えは理解しています。

別方法として、「作ったリージョンデータをファイル化してセーブ・ロードできないか」と思っているのですが

そういうことは可能なのでしょうか?

投稿時間:2005/05/20(Fri) 20:37
投稿者名:のびた
Eメール:
URL :
タイトル:
Re: リージョンデータのセーブ&ロード
> 別方法として、「作ったリージョンデータをファイル化してセーブ・ロードできないか」と思っている
のですが
> 、
> そういうことは可能なのでしょうか?

単純に考えるとハンドルのデータを取得してファイルに書き出し、また、ファイルから読み込んだ
データを確保したメモリに流し込むといった作業でできそうですが。

GlobalAlocやGlobalLock,GlobalUnlock,GlobalSize,CopyMemoryあたりのAPIを組み合わせるとできるんじ

ないでしょうか。

投稿時間:2005/05/21(Sat) 18:20
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: リージョンデータのセーブ&ロード
このあたりを参考にしてみるとか。
hhttp://yokohama.cool.ne.jp/chokuto/urawaza/mcn/bmprgn2.html

投稿時間:2005/05/23(Mon) 09:35
投稿者名:ダンボ
URL :
タイトル:
【お礼】リージョンデータのセーブ&ロード
のびた さん、魔界の仮面弁士さん  どうもありがとうございました。

誤解は無いと過信して書きませんでしたが、「時間がかかるのはリージョンデータを
作るところまでだから、それをプリプロセッサに任せて、APP本体はデータの読み込みと
SetWindowRgnだけをさせよう」という基本方針です。

まず、素直にリージョンデータをセーブ&ロードさせるAPIはなさそうですね。

RGNDATA構造体が公開されているのだから、のびたさんが示唆されるように、
・全部結合済みでSetWindowRgn発行直前のリージョンデータを自分で解析して、
・ファイルに書き出す/読み込む、
・自分でRGNDATA構造体をメモリ上に再構築して、
・これがリージョンデータでございますとSetWindowRgnに渡す。
という方法が見えてきました。(実際にやるかどうかは今後の検討)

魔界の仮面弁士さんご紹介のhhttp://yokohama.cool.ne.jp/chokuto/urawaza/mcn/bmprgn2.html
は、命令語の方ををバイナリセーブ・ロードする方法と見ました。うん、限りなく邪道ですね。
PC98のBASIC時代の手法が、今でも使えるのか。。。プロテクトは効かないのか?
機種互換性はどこまで(命令語セットが合っていれば良いのか)?。

投稿時間:2005/05/23(Mon) 10:43
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: リージョンデータのセーブ&ロード
> 魔界の仮面弁士さんご紹介のhhttp://yokohama.cool.ne.jp/chokuto/urawaza/mcn/bmprgn2.html
> は、命令語の方ををバイナリセーブ・ロードする方法と見ました。うん、限りなく邪道ですね。

すみません。機械語を使うという点ではなく、
「ExtCreateRegion / GetRegionData」のAPIを
使ってみてはどうか、という点で紹介したつもりでした。m(_ _)m