忍者ブログ

GAM-22のメモ

矩形のアスペクト比を保ちウィンドウに合わせて変化

2024.11 ← 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 →

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

矩形のアスペクト比を保ちウィンドウに合わせて変化

アスペクト比とは縦横の割合のことです。矩形のアスペクト比を保ち、ウィンドウの大きさに連動してサイズを可変します。

動画のプレイヤーなどに使える気がします。

if 0 {

#deffunc boxf2 int x, int y, int w, int h

;-----------------------------------------------------------
;    boxfの改造
;-----------------------------------------------------------

; p1,p2 : 中心座標
; p3,p4    : サイズ
;-----------------------------------------------------------

    boxf x-w/2,y-h/2, x+w/2,y+h/2
    return

}

    gsel 0, -1
    screen 1, 640,480, 0

    ; オリジナルのサイズ、実数がポインント
    ow = 500.0 : oh = 300.0

*main
    redraw 0
    color 255,255,255 : boxf

    sw = ow : sh = oh
    v1 = ow/oh

    if (oh > ginfo_winy) | (ow > ginfo_winx) {
        if (ow/ginfo_winx) > (oh/ginfo_winy) {
            sw = 0.0+ginfo_winx
            sh = sw/v1
        } else {
            sh = 0.0+ginfo_winy
            sw = sh*v1
        }
    }

    color 0,0,0 : boxf2 ginfo_winx/2,ginfo_winy/2, sw,sh
    redraw

    await 10
    goto *main

FancyZoomのソースを、HSPに移植すれば良いと思ったけど、上手くいかなかったから、結局自力で考える羽目になりました。次はその失敗例です。

; 失敗作
if 0 {

#deffunc boxf2 int x, int y, int w, int h

;-----------------------------------------------------------
;    boxfの改造
;-----------------------------------------------------------

; p1,p2 : 中心座標
; p3,p4    : サイズ
;-----------------------------------------------------------

    boxf x-w/2,y-h/2, x+w/2,y+h/2
    return

}

    gsel 0, -1
    screen 1, 640,480, 0

    ; オリジナルのサイズ、実数がポインント
    ow = 500.0 : oh = 300.0

*main
    redraw 0
    color 255,255,255 : boxf

    sw = ow : sh = oh
    v1 = ow/oh

    // これだと、縦横縮小で、高さが幅より小さい時、問題がある
    if (oh > ginfo_winy) {
        sh = 0.0+ginfo_winy
        sw = sh*v1
    }
    if (ow > ginfo_winx) {
        sw = 0.0+ginfo_winx
        sh = sw/v1
    }

    color 0,0,0 : boxf2 ginfo_winx/2,ginfo_winy/2, sw,sh
    redraw

    await 10
    goto *main

こんなのもできます。

; 最大値をウィンドウに合わせるなら、もっと簡単
if 0 {

#deffunc boxf2 int x, int y, int w, int h

;-----------------------------------------------------------
;    boxfの改造
;-----------------------------------------------------------

; p1,p2 : 中心座標
; p3,p4    : サイズ
;-----------------------------------------------------------

    boxf x-w/2,y-h/2, x+w/2,y+h/2
    return

}

    gsel 0, -1
    screen 1, 640,480, 0

    ; オリジナルのサイズ、実数がポインント
    ow = 500.0 : oh = 300.0

*main
    redraw 0
    color 255,255,255 : boxf

    sw = ow : sh = oh
    v1 = ow/oh

    if (ow/ginfo_winx) > (oh/ginfo_winy) {
        sw = 0.0+ginfo_winx
        sh = sw/v1
    } else {
        sh = 0.0+ginfo_winy
        sw = sh*v1
    }

    color 0,0,0 : boxf2 ginfo_winx/2,ginfo_winy/2, sw,sh
    redraw

    await 10
    goto *main

HSPの仕様で、ウィンドウサイズ変更中はプログラムがストップするのがなんとも・・・

PR
この記事にコメントする
お名前
タイトル
文字色
URL
コメント
パスワード Vodafone絵文字 i-mode絵文字 Ezweb絵文字
タイトルとは関係ないんですが高校1年に変えた方がいいのでは?
高校に受かったんだし・・・
cosさん / 2008/03/22(Sat) / 編集
ご指摘、感謝します
それもそうですが、まだ中学生料金なので中学生ということにしておきます。
4月1日に、高校1年生にする予定です。

正確に表すと「中学の過程を終了しました」で良いですかね。
まあ、よく考えたら、成人も老人でも該当するわけですが・・・
 (2008/03/22)
この記事にトラックバックする
トラックバックURL:
カテゴリー
カウンター
最新記事
最新コメント
Twitter
人気記事
Amazon お買い得情報
Amazon お買い得情報
プロフィール
自画像
HN :
GAM-22
性別:
男性
職業:
大学1年生
HSP暦:
6年
好きなもの :
ゲーム, アニメ, マヨネーズ
嫌いなもの :
運動, 注射, ホラー映画, 英語
好きなバンド :
Muse, Radiohead
その他 :
文章能力が欠如している
バナー
Copyright © GAM-22のメモ All Rights Reserved
Powered by ニンジャブログ Designed by ピンキー・ローン・ピッグ 忍者ブログ / [PR]