回答編集履歴

3

追記

2021/11/28 02:28

投稿

thkana
thkana

スコア7652

test CHANGED
@@ -45,3 +45,109 @@
45
45
  ...
46
46
 
47
47
  と、多分どんどん大きな負の値になるかと思いますが、それは意図したものですか? (画像の高さに負の値を与えるとなにが表示されるんだろう? 画像がひっくり返るんだっけ?)
48
+
49
+
50
+
51
+ ---
52
+
53
+ TN8001さんの回答みてて、そう言えばgetで切り出しってできなかったっけ? ということで試してみたもの。ご参考まで。
54
+
55
+ ```Processing
56
+
57
+ PImage single;
58
+
59
+ PImage quad;
60
+
61
+ int w, h;
62
+
63
+ float x = 0, vx = 0.05; //値は適宜いじってみてください
64
+
65
+ float y = 0, vy = -0.5;
66
+
67
+
68
+
69
+ void setup() {
70
+
71
+ size(640, 480);
72
+
73
+ //文字列を切っているのは単にソースコードの横幅を抑えるため
74
+
75
+ single = loadImage("https://teratail-v2.storage.googleapis.com/uploads/"+
76
+
77
+ "avatars/u10/107752/752e11b31475761a_thumbnail.png");
78
+
79
+ w=single.width; //よく使うので見やすくするため
80
+
81
+ h=single.height;
82
+
83
+ image(single, 0, 0);//4枚並べて表示
84
+
85
+ image(single, 0, h);
86
+
87
+ image(single, w, 0);
88
+
89
+ image(single, w, h);
90
+
91
+ //画面外にはみ出す場合はgetで画素が取れないので
92
+
93
+ //PGraphicsで仮想画面とか考える必要あり(今回は大丈夫)
94
+
95
+ quad=get(0, 0, w*2, h*2);//並べた画像を取り込む
96
+
97
+ background(0); //小細工の証拠隠滅
98
+
99
+ noFill();
100
+
101
+ stroke(0, 255, 0);
102
+
103
+ }
104
+
105
+
106
+
107
+ void draw() {
108
+
109
+ int x0=50;
110
+
111
+ int y0=height/2-h;//上下真ん中に表示したい
112
+
113
+ int x1=350;
114
+
115
+ int y1=height/2-h/2;
116
+
117
+
118
+
119
+ background(0);
120
+
121
+
122
+
123
+ //この2行は切り出し位置を表示しているだけ
124
+
125
+ image(quad, x0, y0);
126
+
127
+ rect(x+x0, y+y0, w, h);
128
+
129
+
130
+
131
+ //getで切り出した部分画像を表示
132
+
133
+ image(quad.get((int)x, (int)y, w, h), x1, y1);
134
+
135
+
136
+
137
+ //切り出し位置更新
138
+
139
+ x=x+vx;
140
+
141
+ if (x<0)x=w;
142
+
143
+ if (x>w)x=0;
144
+
145
+ y=y+vy;
146
+
147
+ if (y<0)y=h;
148
+
149
+ if (y>w)y=0;
150
+
151
+ }
152
+
153
+ ```

2

訂正

2021/11/28 02:27

投稿

thkana
thkana

スコア7652

test CHANGED
@@ -34,13 +34,13 @@
34
34
 
35
35
  image関数の第5パラメータ、画像の高さですが、例えばいわゆるFullHDのディスプレイだったとすると
36
36
 
37
- y=0,i=0のとき0
37
+ y=3,i=0のとき3
38
38
 
39
- y=0,i=1のとき-540
39
+ y=3,i=1のとき-537
40
40
 
41
- y=0,i=2のとき-1080
41
+ y=3,i=2のとき-1077
42
42
 
43
- y=0,i=1のとき-1620
43
+ y=3,i=1のとき-1617
44
44
 
45
45
  ...
46
46
 

1

マークダウンの記号処理

2021/11/28 00:18

投稿

thkana
thkana

スコア7652

test CHANGED
@@ -1,4 +1,4 @@
1
- ソースコードの始まる直前行と最終行の次に行頭から``` だけの行書いてください。行頭の方は ```Processing としてもいいですが。そうすると、コード部分が区切られてインデントも表示され、非常に見やすくなります(というかそうでないのが見にくい)
1
+ 質問の編集画面に入り、コード部分を選択して<code>押してください( [ヘルプ](https://teratail.com/help/question-tips#questionTips3-5-1)を参照スマホの場合は...知りません)。そうすると、コード部分が区切られてインデントも表示され、非常に見やすくなります(というかそうでないのが見にくい)
2
2
 
3
3
 
4
4
 
@@ -20,11 +20,15 @@
20
20
 
21
21
  ```Processing
22
22
 
23
+ //冒頭の操作(<code>)でこういう表示になります
24
+
23
25
  for (int i=0; i<30; i++) {
24
26
 
25
27
  image(img2, width*3/4, height*2/3, width/3, y-height/2*i);
26
28
 
27
29
  }
30
+
31
+
28
32
 
29
33
  ```
30
34