|
|
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
|
|
2007/5/2(Wed) 13:32:06|NO.7902
一度別画面に読み込んで、gzoomでいいんでね?
|
|
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
これだと画像の一部しか表示されません
いろんなサイズの画像をウィンドウの縦のサイズに合わせて
縮小や拡大して表示する方法を教えて下さい。
|
|
2007/5/2(Wed) 14:20:00|NO.7904
ginfo_sizexやginfo_sizeyで、ウインドウのサイズ確認したらいいんでね?
あと、gzoomの使い方もう少し工夫したらいいんでね?
|
|
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
これだとナゼかエラーが出る
何が変なのか教えて下さい。
|
|
2007/5/2(Wed) 18:55:26|NO.7923
どんなエラーなんですか。
もし、
>>画像ファイルがない
なら
aが増加して
画像の名前が
1.jpg
2.jpg
3.jpg
4.jpg
・
・
・
という画像を読み込もうとしているからです。
それだけの画像ファイルを準備していますか?
|
|
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 マクロを使うといいかと思います。
|
|
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
でもこれだと横サイズもウィンドウのサイズになって変になってしまうので
縦と横のバランスが崩れないように表示する方法を教えて下さい。
|
|
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 の時も同様に計算する
|
|
2007/5/2(Wed) 22:26:36|NO.7936
もう少し分かりやすく教えて下さい。
|
|
2007/5/2(Wed) 22:48:58|NO.7938
たとえば、画像の縦サイズを 1.5倍してウィンドウの縦サイズと
同じになったとしたら、画像の横サイズも同く1.5倍すれば、
比率のバランスがとれるという事です。
|
|
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 ÷ [比率]
ほかの場合も同じようにして求める。

| |
|
2007/5/3(Thu) 04:29:51|NO.7944
すいません。ボーとしててピントがずれてました。
要するに、
横幅は高さの何倍か?
または高さは横幅の何倍か? と言う考え方です。
これは比率さえ分かっていれば、横幅から高さが分かったり、
高さから横幅が分かります。
たとえば元の画像の横幅が100で高さが80だとしたら、
100/80 = 1.25 で、横幅は高さの1.25倍の長さと言う事が分かる。
1.25 に元の高さの80を掛けたら元の横幅100になるので
比率(1.25)と 高さで、横幅がちゃんと得られている事がわかる。
ということは、ウィンドウの高さに 比率 を掛けたら?
|
|
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
教えてもらった事を何となく理解したつもり何ですけど
やっぱり間違ってますか?
|
|
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
|
|
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 を書いて実行してみてください。
|
|
2007/5/3(Thu) 22:05:50|NO.7981
ハテナさんの動きました!
凄いちゃんと表示されてる。
ところで僕が作ったやつドコが悪いんでしょうか?
誰か教えて下さい。
|
|
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
|
|
2007/5/3(Thu) 23:23:06|NO.7991
おめでとーおめでとー。
自力で出来る方がうれしいよね。
|
|