HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0502
S・F画像をウィンドウの縦サイズにするには?22解決


S・F

リンク

2007/5/2(Wed) 13:06:43|NO.7901

画像のサイズをウィンドウの縦サイズに合わせる方法を教えて下さい。
今作ってるのはこんなの↓

     screen 0,640,480,16      a=1 *st picload ""+a+".jpg" a=a+1 wait 100 goto *st



この記事に返信する


f

リンク

2007/5/2(Wed) 13:32:06|NO.7902

一度別画面に読み込んで、gzoomでいいんでね?



S・F

リンク

2007/5/2(Wed) 14:02:06|NO.7903


screen 0,640,480,16 a=1 *st buffer 1 picload ""+a+".jpg" gsel 0,1 gzoom 640,480,1,0,0,640,480 a=a+1 wait 100 goto *st

これだと画像の一部しか表示されません
いろんなサイズの画像をウィンドウの縦のサイズに合わせて
縮小や拡大して表示する方法を教えて下さい。



f

リンク

2007/5/2(Wed) 14:20:00|NO.7904

ginfo_sizexやginfo_sizeyで、ウインドウのサイズ確認したらいいんでね?
あと、gzoomの使い方もう少し工夫したらいいんでね?



S・F

リンク

2007/5/2(Wed) 17:19:29|NO.7916


screen 0,640,480,16 a=1 *st buffer 1 picload ""+a+".jpg" x=ginfo_sizex y=ginfo_sizey gsel 0,1 gzoom 640,480,1,0,0,x,y a=a+1 wait 100 goto *st
これだとナゼかエラーが出る
何が変なのか教えて下さい。



KENTA

リンク

2007/5/2(Wed) 18:55:26|NO.7923

どんなエラーなんですか。
もし、
>>画像ファイルがない
なら
aが増加して
画像の名前が

1.jpg 2.jpg 3.jpg 4.jpg  ・  ・  ・
という画像を読み込もうとしているからです。
それだけの画像ファイルを準備していますか?



S・F

リンク

2007/5/2(Wed) 19:08:56|NO.7924

このプログラムは不正な処理を行ったので強制終了されます。
って書いてある。

x=ginfo_sizex
y=ginfo_sizey
の部分がダメなのかと思うんですけど・・・



りさ

リンク

2007/5/2(Wed) 20:33:43|NO.7928

こんにちわ、りさです。

>画像のサイズをウィンドウの縦サイズに合わせる方法

picload "filename"

とすると、バッファ画面の大きさが自動的に画像の大きさに合わせられます。
ですので、画像の大きさは

picload "filename"

x = GINFO_WINX
y = GINFO_WINY

で取得することが出来ます。

この大きさを、gzoom命令で指定すれば良いのではないかと思います。

>x=ginfo_sizex
>y=ginfo_sizey
>の部分がダメなのかと思うんですけど・・・

ヘルプで調べて見ると、

[現在の操作先ウィンドウの横幅が代入されています。 ] [これは、ウィンドウの枠やタイトルバーなども含めたサイズになります。]
とあります。

ウィンドウのクライアントエリアのサイズを調べるときは、
ginfo_winx, ginfo_winy か ginfo_sx, ginfo_sy マクロを使うといいかと思います。



S・F

リンク

2007/5/2(Wed) 21:12:16|NO.7930

何とかウィンドウ縦サイズに合わせることが出来ました。

screen 0,640,480,16 a=1 *st buffer 1 picload ""+a+".jpg" x=ginfo(12) y=ginfo(13) gsel 0,1 gzoom 640,480,1,0,0,x,y a=a+1 wait 100 goto *st
でもこれだと横サイズもウィンドウのサイズになって変になってしまうので
縦と横のバランスが崩れないように表示する方法を教えて下さい。



Shinya

リンク

2007/5/2(Wed) 22:01:59|NO.7932

サンプルを載せますので、考えてみてください。
あと応用的に、画像が画面からはみ出てしまう場合はどうするか考えるのもいいかも。
randomize
screen 0, (rnd(3)+1)*320, 480, 16 buffer 1 picload dir_exe+"/docs/cg.gif" x = ginfo_winx y = ginfo_winy 比率 = double(x) / y gsel 0, 1 repeat redraw 0 color 255, 255, 255 : boxf : color // 表示する縦幅 wy + 1 wx = 比率 * wy pos (ginfo_winx-wx)/2, (ginfo_winy-wy)/2 gzoom wx, wy, 1, 0, 0, x, y redraw 1 await 10 loop

A = 画像の幅
B = 画像の高さ
C(比率) = X/Y または Y/X

   とする

Xに+10加えたとき
C(比率) = (X+10)/Y
    ↓
左(左辺)と、右(右辺)に Y をかけて
    ↓
C(比率)*Y = (X+10)/Y*Y
    ↓
C(比率)*Y = (X+10)
    ↓
左(左辺)と、右(右辺)を C(比率) で割ると
    ↓
C(比率)/C(比率)*Y = (X+10)/C(比率)
    ↓
Y = (X+10)/C(比率)

========================

C(比率) = Y/X の時も同様に計算する



S・F

リンク

2007/5/2(Wed) 22:26:36|NO.7936

もう少し分かりやすく教えて下さい。



osakana

リンク

2007/5/2(Wed) 22:48:58|NO.7938

たとえば、画像の縦サイズを 1.5倍してウィンドウの縦サイズと
同じになったとしたら、画像の横サイズも同く1.5倍すれば、
比率のバランスがとれるという事です。



Shinya

リンク

2007/5/3(Thu) 00:51:18|NO.7942

1.「読み込んだ画像の高さと幅の比率を求める」

   A = ginfo_winx 画像の幅(横)
   B = ginfo_winy 画像の高さ(縦)
   C = A ÷ B   比率計算

 比率とは A と B を比べたときの割合。 割合とは、ある数を「割って」みてそれがどうなったかの値。
AとBの値が同じなら、比率は1になる。
 A=10
 B=10
 C=(10÷10)=1
AがBの半分の値なら、比率は二分の一になる。
 A=5
 B=10
 C=5÷10=0.5 (二分の一)
AがBの2倍の値なら、比率は2倍になる。
 A=10
 B=5
 C=10÷5=2

ここで比率の決め方は2通りある。
  ① C=A÷B
としたものと
  ② C=B÷A
としたもの。

 Bから見たAの大きさなのか、Aから見たBの大きさなのかということである。どちらにするのかは、その時々。
画像の幅をスクリーンいっぱいに表示するのか、画像の高さをスクリーンいっぱいに表示するのか。とかで、プログラムが組める。
要するに、S・Fクンの身長が、1メートル50センチだとして、僕の身長が1メートル80センチですから、
S・Fクンから見て、僕は180/150=1.2倍だということ。僕から見たら、150/180=0.833333倍だということ。
1年たってS・Fクンの身長が1メートル60センチになったとき、さあ僕の身長はどうなるでしょうということ。(二人の身長の比率を変えずに)

2.「比率を使って画像の大きさを変換する」

比率が1.の①のようなとき(C=A÷B)式変形すると

 ③ A=C×B
 ④ B=A÷C

となる

 ==== どうしてか ==== 【④ の式を証明する】

A = 元の画像の幅
B = 元の画像の高さ

   とする

[比率] = A÷B (または B÷A)
左(左辺)と、右(右辺)に B をかけて
    ↓
[比率]×B = A÷B×B(BとBが約分できる)
    ↓
[比率]×B = A
    ↓
左(左辺)と、右(右辺)を [比率] で割ると
    ↓
[比率]×B÷[比率]([比率]と[比率]が約分できる) = A÷[比率]
    ↓
⑤つまり B = A÷[比率]・・・・④の式と同じになっている

 【証明終了】

AA = 新しい画像の幅(拡大縮小したもの)
BB = 新しい画像の高さ(拡大縮小したもの)

Aに+10加えて新しい画像を作った(拡大した)
AA = A + 10
新しくできる画像の高さBBは式⑤より
BB = AA ÷ [比率]

ほかの場合も同じようにして求める。



osakana

リンク

2007/5/3(Thu) 04:29:51|NO.7944

すいません。ボーとしててピントがずれてました。

要するに、
横幅は高さの何倍か?
または高さは横幅の何倍か? と言う考え方です。
これは比率さえ分かっていれば、横幅から高さが分かったり、
高さから横幅が分かります。

たとえば元の画像の横幅が100で高さが80だとしたら、
100/80 = 1.25 で、横幅は高さの1.25倍の長さと言う事が分かる。
1.25 に元の高さの80を掛けたら元の横幅100になるので
比率(1.25)と 高さで、横幅がちゃんと得られている事がわかる。
ということは、ウィンドウの高さに 比率 を掛けたら?



S・F

リンク

2007/5/3(Thu) 18:22:54|NO.7967

これだと0で除算しましたってエラーになる

screen 0,640,480,16 a=1 *st buffer 1 picload ""+a+".jpg" x=ginfo_winx y=ginfo_winy c=y/x gsel 0,1 gzoom 640,480,1,0,0,x/c,y a=a+1 wait 100 goto *st
教えてもらった事を何となく理解したつもり何ですけど
やっぱり間違ってますか?



f

リンク

2007/5/3(Thu) 18:58:41|NO.7970

そもそもヘッダが入ってないんじゃね?

一行目に「#include "hspdef.as"」と書いてやらないと、
ginfo_winxもginfo_winyも使えないべ。


説明にも「※このシステム変数は、マクロとしてhspdef.as内で定義されています。」
と書いてあるべ。


あと、0除算になるのは、整数型だからじゃね?

c=y/xをc=double(y)/double(x)にして
gzoom 640,480,1,0,0,x/c,yをgzoom 640,480,1,0,0,double(x)/c,yにして
やれば、とりあえず動くべ。多分じゃが。

整数型と実数型についてしらべてみるといいべ。



貴王

リンク

2007/5/3(Thu) 19:08:11|NO.7971

	a=1
*st screen a-1,640,400,16 picload ""+a+".jpg" pos 0,0 gzoom ginfo_winx,ginfo_winy,0,0,0,ginfo_sizex,ginfo_sizey,0 a=a+1 wait 100 goto *st
ではだめですか?



ハテナ

リンク

2007/5/3(Thu) 20:36:18|NO.7975

> そもそもヘッダが入ってないんじゃね?
  「HSP拡張マクロを使用する」にチェックが
  入っていると自動で読み込まれて使える様です。

> ではだめですか?
  私にはちょっと意味が分からないんですが、
  どう言う意図があるんでしょう?


こんな感じでやって見て下さい。

dialog "jpg;*.bmp;*.gif",16 if stat=0 :end exist refstr if strsize=-1 :end picload refstr sizex=double(GINFO_WINX) sizey=double(GINFO_WINY) gsel 0 sps=100 size=GINFO_WINY-sps*2 buf=sizex/sizey color boxf 0,sps-1,GINFO_WINX,sps-1 boxf 0,size+sps,GINFO_WINX,size+sps pos (GINFO_WINX-buf*size)/2,sps gzoom buf*size,size,1,0,0,sizex,sizey,1 title ""+buf



S・F

リンク

2007/5/3(Thu) 21:43:23|NO.7978

こんな感じで作ったんですけどこれだと
まだバランスが崩れたまま。

#include "hspdef.as" screen 0,640,480,16 a=1 *st buffer 1 picload ""+a+".jpg" x=double(GINFO_WINX) y=double(GINFO_WINY) c=y/x gsel 0,1 gzoom 640,480,1,0,0,x/c,y a=a+1 wait 100 goto *st
貴王さんのは、ちょっとやりたい事と違うような気が・・・
ハテナさんのは、ちょっと分かりにくいので実行してみるとエラーが出てます。



ハテナ

リンク

2007/5/3(Thu) 21:54:18|NO.7980

いつの間にか buffer が抜けてました。すいません。
picload の上に buffer 1 を書いて実行してみてください。



S・F

リンク

2007/5/3(Thu) 22:05:50|NO.7981

ハテナさんの動きました!
凄いちゃんと表示されてる。

ところで僕が作ったやつドコが悪いんでしょうか?
誰か教えて下さい。



S・F

リンク

2007/5/3(Thu) 22:40:36|NO.7987

出来ました。
皆さんありがとう。

出来たやつはこれ

screen 0,640,480,16 a=1 *st buffer 1 picload ""+a+".jpg" x=double(GINFO_WINX) y=double(GINFO_WINY) gsel 0 c=x/y gzoom c*480,480,1,0,0,x,y,1 a+=1 wait 100 cls goto *st



f

リンク

2007/5/3(Thu) 23:23:06|NO.7991

おめでとーおめでとー。
自力で出来る方がうれしいよね。



ONION software Copyright 1997-2025(c) All rights reserved.