teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記

2020/11/01 03:42

投稿

nto
nto

スコア1438

answer CHANGED
@@ -1,3 +1,44 @@
1
1
  今回のケースでは、google.pngとbaboon.jpgのwidth/heightはそれぞれ異なるサイズとなる為
2
2
  サイズがオーバーしている場合の例外処理なども併せて必要になると思います。
3
- 範囲外の場合には処理は行わない、繰り返しbaboon.jpgを表示させるなど様々です。
3
+ 範囲外の場合には処理は行わない、繰り返しbaboon.jpgを表示させるなど様々です。
4
+
5
+
6
+
7
+ ### 追記
8
+ もっとスマートな書き方はあるでしょうが、わかりやすく書いていきます。
9
+ この場合bx,byと2枚目の画像の座標をカウントする変数も用意しておくと良いでしょう。
10
+ 処理はx=0, y=0 → x=0, y=1 →→ x=0, y=511 → x=1, y=0 →→ x=1, y=511という順に処理が行われます。
11
+ プログラミングとは関係がないですが、処理の動作順としては織り物をしている様なイメージですね。
12
+
13
+ まず最初に起こりうるエラーはy列によるindexエラーである為
14
+ except節内ではif by >= b_heightとして、もしもb_heightを上回る数値を指定していた場合には
15
+ byを0にリセットしてあげます。そうする事で連続して2枚目以降の画像の描写の処理が行われます。
16
+ その次に起こりうるエラーがx列によるindexエラーである為
17
+ 上記のexcept節内で入れ子の様に書いてあげればy列に続きx列の処理も行っていけます。
18
+
19
+ これで上下左右連続して画像の表示が可能です。
20
+ (以下サンプルコードとなりますが、ロゴ部分が一部乱れてしまっておりますが飽くまでも例なのでご容赦ください)
21
+ ```python
22
+ bx = 0
23
+ for x in range(g_height):
24
+ by = 0
25
+ for y in range(g_width):
26
+ g, b, r = google_img[x, y]
27
+ if (b, g, r) == (255, 255, 255):
28
+ try:
29
+ google_img[x, y] = baboon_img[bx, by]
30
+ except IndexError:
31
+ if by >= b_height:
32
+ by = 0
33
+ try:
34
+ google_img[x, y] = baboon_img[bx, by]
35
+ except IndexError:
36
+ if bx >= b_width:
37
+ bx = 0
38
+ try:
39
+ google_img[x, y] = baboon_img[bx, by]
40
+ except:
41
+ pass
42
+ by += 1
43
+ bx += 1
44
+ ```

1

訂正

2020/11/01 03:41

投稿

nto
nto

スコア1438

answer CHANGED
@@ -1,5 +1,3 @@
1
- ポイントとしてはbaboon_imgのgbrも取得し
2
- 指定の条件下だった場合にgoogle_img[x, y] = baboon_g, baboon_b, baboon_rとすれば実現が可能です。
3
1
  今回のケースでは、google.pngとbaboon.jpgのwidth/heightはそれぞれ異なるサイズとなる為
4
2
  サイズがオーバーしている場合の例外処理なども併せて必要になると思います。
5
3
  範囲外の場合には処理は行わない、繰り返しbaboon.jpgを表示させるなど様々です。