none
古いノベルゲームをワイドモニターの中心に全画面表示するには RRS feed

  • 質問

  • こんにちは、うまく質問の内容が伝わるか判らないのですが、

    2000年前後のワイドモニターが無かった頃のノベルゲームを、
    現在のワイド規格(1920x1080など)のモニターにアスペクト比を保ったまま
    まんなかに全画面表示させるための考え方が知りたいです。

    (これらのゲームを現在のワイドモニターに全画面表示させると
    画面の縦が潰れてしまう)
    (実現できるソフトがあるのは知っているが、それを使わず自分でやりたい)

    例)
    640x480な画面をアスペクト比を保ちつつ1920x1080のスクリーンの中央に
    1440x1080で描画し、左右の残りの部分は黒くする

    //////////////////////////////////////////////////////////////////
    以下、 アドバイスを求めております私の状況です

    ・普段のプログラム作成でC++/CLIは使っています。
     (dllを呼び出したり、cの言語を埋め込んだり? がとても不慣れです。)

    ・CやC++やwindowsAPIの直接呼び出しなどは超初心者です。
     (APIから取得したデータをC++/CLIで定義した変数にはめ込む?
     などがやはり不慣れです)

    ・DirectX用のAPI? を扱ったことがありません。

    //////////////////////////////////////////////////////////////////
    以下、 上記のスペックの私が、 現在までに思いついた流れです

    ● ウィンドウズフォームアプリケーションでやる方法

    1: ノベルゲームソフトが画面に描画しようとしているところに割り込んで、
       その描画しようとしている画像のデータを取得する。(出力先を変更させる?)
       (どういう段階で、 どうした方法で割り込めるのかなどが判らない)
       (取得できた画像のフォーマットがどんなものになるのかも判らない)

    2: 定期的に? 割り込んで画像を取得できたら、 その画像の一枚一枚に対して
       逐次、 左右に余白を埋める黒い色の長方形を付け加えて
       作成したフォームアプリケーションの中で全画面表示させる?
       (gcnew Bitmap(ワイドのアスペクト比のx, y)のオブジェクトの中に
       左bmpイメージ + ゲーム画面bmpイメージ + 右bmpイメージ を
       位置指定して入れ込み、その後全画面表示など?)

    ●上記の流れをフォームアプリではなく.cppファイルの中で処理する方法

    1: ゲームソフトが出力した画像ファイルを横取り&それ以降の描画処理をさせない

    2: 横取りした画像の左右に黒い長方形を追加した画像を作成して全画面表示させる)

    //////////////////////////////////////////////////////////////////

    教えて下さる方いらっしゃいましたら、ヒントや最低限必要な学習内容
    などのアドバイスをください m(_ _)m

    2014年10月25日 3:10

回答

  • 質問文を読む限り、ノベルゲームや画面サイズはほとんど関係なくて、アプリのウィンドウの乗っ取り方法についてではありませんか? 質問者さんは何を尋ねたいのか、何を答えて欲しいのか把握できているのでしょうか?

    アプリの表示とは別のウィンドウを出すのであれば、キーやマウスの入力はどうするつもりでしょうか? まさか元のウィンドウを見ながらクリックするわけではありませんよね。

    希望される方法ではないとは思いますが、いっそ画面の解像度を落とし、モニタ側の機能で拡大した方が楽に感じられます。

    • 回答としてマーク koujichiu 2014年10月25日 12:45
    2014年10月25日 5:10

すべての返信

  • 質問文を読む限り、ノベルゲームや画面サイズはほとんど関係なくて、アプリのウィンドウの乗っ取り方法についてではありませんか? 質問者さんは何を尋ねたいのか、何を答えて欲しいのか把握できているのでしょうか?

    アプリの表示とは別のウィンドウを出すのであれば、キーやマウスの入力はどうするつもりでしょうか? まさか元のウィンドウを見ながらクリックするわけではありませんよね。

    希望される方法ではないとは思いますが、いっそ画面の解像度を落とし、モニタ側の機能で拡大した方が楽に感じられます。

    • 回答としてマーク koujichiu 2014年10月25日 12:45
    2014年10月25日 5:10
  • ご回答ありがとうございます。

    指摘されて気がつきましたが、 画像以外にもマウスの位置情報やリターンキーなどが押されたかどうか

    の情報も拾わないとならないですね。。。

    > いっそ画面の解像度を落とし、モニタ側の機能で拡大

    そう言われますと、 ノベルゲームが行う画像への入出力に直列?に割り込むのではなく、

    ノベルゲームの起動を監視して、モニタ側の機能に割り込む(設定する?)ことができれば良さそうにも感じますが、

    とても難しそうです。。。orz

    以前モニタの設定でNTSC?サイズにしてみたのですが、 上手に設定できず、

    その時は左上にゲーム画面が行ったりアイコンの配置がボロボロになってしまったことがありまして、

    それでゲームの画面出力をワイドサイズにと思い、相談させていただきました。


    • 編集済み koujichiu 2014年10月25日 7:07
    2014年10月25日 7:02
  • 自己レスです。。。

    実際に自分でインターフェイスへの割り込み処理などをするには、
    まだまだ知識が足りないようですので、

    とりあえず吉里吉里やNスクリプターのようなスクリプトエンジンを使って
    実際にものすごく簡単なゲームを作っていろいろ経験を深めつつ、

    その合間で、 dllの呼び出しや割り込み(これがフックをかけるということ?)
    などの実験を、これもまた自作ソフトでやってみまして、

    少なくとも自分でも行けそうだと感じれるようなレベルにまで達してから
    それでもなお判らないところが出てしまいましたら、
    改めてご相談させてください。

    あと、VGAなゲームの画面のつぶれの件は、今試してみましたら
    以下の方法で かなり違和感が薄れましたのでご報告させていただきます。

    Windows8.1でマザーボード内蔵のIntelのHD4600の場合、
    コントロールパネルのディスプレイのスケーリングの項目で
    水平を0、 垂直を100としました。

    追伸:

    あまり理解の深くない現状では、VGAなゲームのアイコンを自作アプリにDDするなり、
    自作アプリダブルクリックするなりで、その時限りで一発で
    このスケーリング項目の設定を変更するレベルのソフトで十分かと思われます。

    あと、返信を頂けました質問については削除はできないようですので、
    お目汚しになってしまいますが、ご容赦を  m(_ _)m

    2014年10月25日 9:03
  • そういえばアプリケーションのショートカットの[互換性」のタブに「640x480 の解像度で実行する」があります。これを設定すればいいのでは?
    2014年10月26日 6:22