tbasic forum
掲示板 => Tiny Basic for Windows => スレッド開設者: ShionAmasato より 2020年 2月 16日 , 午後 07:58:50
-
画像を連結するツールを作ったのですが、2枚目のloadpictureでゴミが表示されます。
(添付画像はツールで連結した画像をjpg変換したものです、右下に余計なものが表示されています)
ソースコードは添付した通りです
-
画像がない?
-
CLS
PUBLIC FN$
PUBLIC CW
PUBLIC CH
CWPOSITION(16,256)
CSCREEN(160,288)
FOR I=1 TO 8
CBUTTON(I) ON
CBUTTON(I).TOP=I*32-16
CBUTTON(I).LEFT=16
CBUTTON(I).WIDTH=128
CBUTTON(I).HEIGHT=32
NEXT
CBUTTON(1).TEXT="ファイルを開く"
CBUTTON(2).TEXT="保存"
CBUTTON(3).TEXT="モザイク"
CBUTTON(4).TEXT="拡大"
CBUTTON(5).TEXT="縦連結"
CBUTTON(6) OFF '未実装
CBUTTON(7) OFF '未実装
CBUTTON(8 ).TEXT="終了"
CHDIR GETPROGRAMDIR
DO
IF CBUTTON(1).CLICK THEN LOADFILE
IF LEN(FN$)>0 THEN
IF CBUTTON(2).CLICK THEN SAVEFILE
IF CBUTTON(3).CLICK THEN MOZAIKU
IF CBUTTON(4).CLICK THEN RESIZE
IF CBUTTON(5).CLICK THEN JOINH
ENDIF
IF CBUTTON(8 ).CLICK THEN EXIT DO
LOOP
CLOSECSCREEN
END
SUB LOADFILE
DIM T$
T$=SELECTOPENFILE(" |*.JPG;*.PNG;")
IF LEN(T$)>0 THEN
FN$=""+T$
ELSE
EXIT SUB
ENDIF
T$=GETIMAGESIZE$(FN$):CW=VAL(LEFT$(T$,4)):CH=VAL(RIGHT$(T$,4))
GWPOSITION(256,256)
GSCREEN(2048,2048)
GFLOCATE(0,0)
LOADPICTURE(FN$)
END SUB
SUB SAVEFILE
FN$=LEFT$(FN$,INSTR(1,FN$,".")-1)+"_EX.PNG"
SAVEPICTURE(FN$,CW,CH)
?FN$+"に保存しました"
END SUB
(中略)
SUB JOINH
DIM W,H
DIM F$,T$
F$=SELECTOPENFILE(" |*.JPG;*.PNG;")
IF LEN(F$)<1 THEN EXIT SUB
?"連結処理中…"
T$=GETIMAGESIZE$(F$):W=VAL(LEFT$(T$,4)):H=VAL(RIGHT$(T$,4))
GFLOCATE(-MAX((CW-W)\2,0),-CH)
LOADPICTURE(F$)
CH=MIN(CH+H,2048)
?"連結完了"
END SUB
-
すいません、自己解決しました
GFLOCATE(-MAX((CW-W)\2,0),-CH)
LOADPICTURE(F$)
ではなく
GLOCATE(MAX((CW-W)\2,0),CH)
LOADPICTURE(F$,W,H)
にすると求めていた挙動をします。
数値がマイナスなのを訝るべきでした…
-
話題とは別なのですが
この掲示板について気になるところ
・スパムがついているので消した方がよさそう
・ファイル添付機能があるのに添付したファイルが見れないのはどういうことでしょうか?
-
『loadpictureでゴミが表示される』挙動自体はバグの疑いがあるので簡潔に再現コードを書いておきます(仕様としては不可解)
GSCREEN(999,999)
GLOCATE(0,0):LOADPICTURE("幅400画像.png")
GLOCATE(0,240):LOADPICTURE("幅300画像.png")
このように1枚目より2枚目の幅が小さいとき、幅の差分だけ1枚目の画像が表示されます
tbasicのversionは1.50です
-
ShionAmasatoさん
こんにちは,
>ソースコードは添付した通りです
tbasic の中ではかなり難しい命令等を使ったプログラムで
興味深く,読ませていただきました。
> すいません、自己解決しました
良かったです。
>この掲示板について気になるところ
ご指摘ありがとうございます。
>・スパムがついているので消した方がよさそう
はい,その通りです。削除します。
この掲示板はなるべく自由に投稿してもらいたいとの考えから,初めての投稿には特に制限は
かけていません。そのため,実はスパムは膨大に投稿されています。一度スパムが投稿されると
投稿の削除,ユーザー,IPへの投稿制限等をかけていますが,異なる名前やIPでの投稿は後をたちません。
それでもその効果があったのか,最近は随分と減っています。
>ファイル添付機能があるのに添付したファイルが見れないのはどういうことでしょうか?
ログインすると見える筈ですが,いかがでしょうか。
>『loadpictureでゴミが表示される』挙動自体はバグの疑いがあるので
> 簡潔に再現コードを書いておきます(仕様としては不可解)
有難うございます。もしかして外しているかもしれませんが,LoadPictureの仕様を少し説明します。
LoadPictureは現在開いているScreenに当該の画像をLoadします。グラフを書くときの,
Line, PSet などと同じです。ですから,画面に何か描かれていると,前の画像が残る可能性があります。
それを消したい場合は,Cls 2 を使うか,当該範囲をBackColorでPaint 等で塗りつぶすことが考えられます。
GScreen は何度でもサイズ等を設定し新たに開くことができますので,画像をLoadする場合は,
GetImageSize で大きさを決めてScreen を設定するか,もしくは
GScreen (x,y,x1,y1)型のScreenの開き方を使って GStretch や,GScroll で処理する方法も考えられます。
参考になればよいのですが。
-
一度グラフをCLSするというのはちょっと頭になかったので追試してみたのですが
『CLS 2』で画面が真っ白になったあとに、残骸付きの画像が読み込まれるというかなり怪しい挙動なんです…
(CLS 2の後にSLEEPで2秒空けて確認しました)
添付画像の件ですが、ShionAmasatoでログイン状態にもかかわらず見えません。そちらからは見えてるのでしょうか?
(「投稿内容を編集」ではファイルの存在が確認できました。ただ画面上に画像が出ません)
-
ShionAmasatoさん
> 一度グラフをCLSするというのはちょっと頭になかったので追試してみたのですが
>『CLS 2』で画面が真っ白になったあとに、残骸付きの画像が読み込まれるというかなり怪しい挙動なんです…
>(CLS 2の後にSLEEPで2秒空けて確認しました)
確かに変です。確認しました。バグでした。ご指摘ありがとうございました。
早速修正しました。それを
http://www.tbasic.org/downloads/TBasic1501.zip
に置きました。お試しください。
>添付画像の件ですが、ShionAmasatoでログイン状態にもかかわらず見えません。そちらからは見えてるのでしょうか?
>(「投稿内容を編集」ではファイルの存在が確認できました。ただ画面上に画像が出ません)
私からはファイルの存在も見えますし,掲示板画面で画像が普通に表示されます。
掲示板設定では特に特別な設定をしていないので,
ログインすれば見えると思っていたのですが。何か別の問題があるかもしれません。
掲示板の設定をもう一度確認してみます。
ありがとうございました。
-
1501を試しました。
今度は余計な部分がつかずに表示できました。
修正ありがとうございます。
-
グラフ画面でもう一つ気になっていたのですが、LINE命令で色番号を省くとB,BFが指定できない(変数名と解釈される?)
のですが、0~15番で指定できない色を塗りつぶし四角を一気に描くことはできないのでしょうか
FOR-NEXTとPSETを組み合わせると処理時間が掛かりそうで…
添付画像はテストプログラムです
-
>グラフ画面でもう一つ気になっていたのですが、LINE命令で色番号を省くとB,BFが指定できない(変数名と解釈される?)
>のですが、0~15番で指定できない色を塗りつぶし四角を一気に描くことはできないのでしょうか
GForeColor で前景色を指定する場合の,ヘルプでの「Lineのカラー指定を省略する説明」が少しわかりにくいかもしれません。
少し捕捉します。
Line(140,140)-(180,180),9,B
でのカラー番号の省略は
Line(140,140)-(180,180),B
ではなく,
Line(140,140)-(180,180),,B
です。ですから目的のプログラムは
GScreen(600,600)
Line(40,40)-(80,80),9
Line(140,140)-(180,180),9,B
Line(240,240)-(280,280),9,BF
GForeColor="#905030":Line(40,40+300)-(80,80+300)
GForeColor="#905030":Line(140,140+300)-(180,180+300),,B
GForeColor="#905030":Line(240,240+300)-(280,280+300),,BF
となります。お試しください。
-
なるほど、コンマの数は変わらず、値だけ省くのですね。
これで目的の機能は一通り実装できそうです。
ありがとうございました。
-
用が済みましたのではてなフォトライフに仮アップした画像を削除しました。
あわせてスレッドのロックもかけておきます。