|
|
2011/11/12(Sat) 00:36:36|NO.42929
読み込んだ画像をドット絵にするようなものを作りたいのです。
ファイルを参照して画像を開くところまではできました。
問題はその後です……
大まかな流れとしては
1.選択された画像の各座標の色を読み取る
2.読み取った座標に読み取った色で3×3の四角形を描画
という風にしたらできるんじゃないかと思っています。
色を読み取るところまではなんとかできましたがどうも描画がうまくいきません。
どうしたらいいでしょうか?
説明がわかりにくくてすみません。
|
|
2011/11/12(Sat) 01:00:51|NO.42930
>色を読み取るところまではなんとかできましたがどうも描画がうまくいきません。
どんな風にやってみたの?
3x3の四角を単体で描画させるところはOK?
|
|
2011/11/12(Sat) 01:07:41|NO.42931
できるけどそれって縮小だよ。ドット絵化とは多分違うよ。
M = 3 ; ←縮小倍率
dialog "",16
if stat == 0 : end
picload refstr
PicW = ginfo_sx
PicH = ginfo_sy
screen 1, PicW / M, PicH / M
repeat PicW
nowX = cnt
if nowX \ M > 0 : continue
repeat PicH
nowY = cnt
if nowY \ M > 0 : continue
gsel 0
pget nowX, nowY
r = ginfo_r
g = ginfo_g
b = ginfo_b
gsel 1
color r, g, b
pset nowX / M, nowY / M
await 0
loop
loop
|
|
2011/11/12(Sat) 01:21:22|NO.42934
色の平均でやってみた。
すごい綺麗に縮小できて自分でもびっくりした。
M = 3
dialog "",16
if stat == 0 : end
picload refstr
PicW = ginfo_sx
PicH = ginfo_sy
DotW = PicW / M
DotH = PicH / M
screen 1, DotW, DotH
repeat DotW
PicX = cnt * M
DotX = cnt
repeat DotH
PicY = cnt * M
DotY = cnt
gosub *getAve
gsel 1
color R, G, B
pset DotX, DotY
await 0
loop
loop
stop
*getAve
R = 0
G = 0
B = 0
repeat M
nowX = PicX + cnt
repeat M
nowY = PicY + cnt
gsel 0
pget nowX, nowY
R += ginfo_r
G += ginfo_g
B += ginfo_b
loop
loop
R /= M * M
G /= M * M
B /= M * M
return
|
|
2011/11/12(Sat) 01:46:56|NO.42936
LOKUさんはドット絵にしたいのか、モザイク画像にしたいのかを伺いたい。
縮小だけなら、gzoomでも・・・
|
|
2011/11/12(Sat) 01:53:05|NO.42939
ちなみに私は普段、縮小していない画像をトレースしながらドット絵を描きます。
この方が細かいところまで見ながら自分でデフォルメができます。
|
|
2011/11/12(Sat) 02:17:46|NO.42941
ピクセルごとに読み取りとかやってないけど、
ドット絵というか、モザイクにしてみました。
意味を履き違えていたらすみません。
あと、簡単なことしかしてません。
↓初心者なのでひどいです。
M = 2 ;←元画像からの縮小倍率
dot = 4 ;←1ドットの大きさ(なんか変な言い方)
dialog "",16
if stat == 0 : end
picload refstr
PicW = ginfo_sx
PicH = ginfo_sy
screen 1, PicW / M, PicH / M
gzoom PicW / (M*dot),PicH / (M*dot),,,,PicW,PicH
gzoom PicW / M, PicH / M,1,,,PicW / (M*dot),PicH / (M*dot)
stop
|
|
2011/11/12(Sat) 23:59:16|NO.42959
dialog "*",16,
dialog "STAT="+stat+"\nNAME="+refstr,0,"結果"
celload ""+refstr+"",1
gcopy 1,0,0,640,480
repeat:await
redraw 0
;X = p_X+cnt*4
pget X,Y // 座標(X,Y)の点を取得
a = ginfo_r
b = ginfo_g
c = ginfo_b // 取得した点の色情報を代入
pos X,Y
color a,b,c
boxf X,Y,X+4,Y+4
X++
if (X > 300) : Y+4 : X=0
if (Y > 200) : break
redraw 1
loop
stop
↑これでは動きませんが、こんな感じでやってます
ひどいですけどねこれw
|
|
2011/11/13(Sun) 00:19:46|NO.42962
確かに正常に動かないのは分かるが、要するに「何をしたいのか」が
分からない、良く分からない状況なのですが。
|
|
2011/11/13(Sun) 00:31:26|NO.42963
うーん……
ドット絵にしたい、といよりは、画像を荒くしたいって言ったほうが近いですかねぇ…
何がしたいかというと、そのソースでは何がしたいか分かりませんけど
読み込んだ画像をドット絵風にしたいんです……orz
|
|
2011/11/13(Sun) 00:49:24|NO.42964
いや殆ど出来てるんだが?
dialog "*",16,
dialog "STAT="+stat+"\nNAME="+refstr,0,"結果"
celload ""+refstr+"",1
gcopy 1,0,0,640,480
screen
repeat:await
redraw 0
;X = p_X+cnt*4
gsel 1 ;追加
pget X,Y // 座標(X,Y)の点を取得
a = ginfo_r
b = ginfo_g
c = ginfo_b // 取得した点の色情報を代入
gsel 0 ;追加
pos X,Y
color a,b,c
boxf X,Y,X+4,Y+4
X+4 ;修正
if (X > 300) : Y+4 : X=0
if (Y > 200) : break
redraw 1
loop
stop
読み込むウィンドウと書き込むウィンドウが同じになってたから
最初に描画した色で次に読み込むドットが同じ色で塗りつぶされてた
更に縦は4ドット移動させてるのに横は1ドツトしか移動させて無い
|
|
2011/11/13(Sun) 00:57:52|NO.42965
そ、そんな……!!
詰めが甘かったです。
というか、これくらいのことを考えられなかったのが悔しいですorz
みなさんありがとうございました。
|
|